CMakeLists学习二、链接库搜索路径与ld
CMakeLists学习二、链接库搜索路径与ld
- 前言
- gcc的链接
- gcc链接命令
- ld搜索路径
- ldconfig刷新动态库缓存
- CMakeLists指定链接搜索路径
- 后记
前言
本文继续CMakeLists相关学习,链接库的相关问题。
gcc的链接
gcc链接命令
首先需要知道gcc编译时的链接指令:
gcc -o helloworld helloworld.c -I/path_to_include -i xxx.h -L/path_to_lib -lxxx
以上这行命令,-I/dir
指定了gcc搜索头文件的路径,-i
指定头文件名,-L/dir
指定搜索库文件的路径,-l
指定了库文件名(-lxxx的库文件名为libxxx.so或libxxx.a)
如果库文件路径下同时有.so和.a,则优先使用动态库链接;可以通过-static指定链接静态库。
ld搜索路径
ld的动态库搜索路径按顺序为:
gcc指令-L/dir路径 (非默认)
环境变量LD_LIBRARY_PATH路径 (默认)
配置文件/etc/ld.so.conf中的路径 (默认)
默认路径/lib,/usr/lib或者/lib64,/usr/lib64 (默认)
ld的静态库搜索路径按顺序为:
gcc指令-L/dir路径 (非默认)
环境变量LIBRARY_PATH路径 (默认)
默认路径/lib,/usr/lib,/usr/local/lib (默认)
顺便说一下头文件的搜索路径,可以通过gcc指令打印出来:
`gcc -print-prog-name=cc1plus` -v
大致有
gcc指定-I/dir路径
.cpp文件中#include给定的头文件相对路径
/usr/include
/usr/local/include
可以通过ld命令查看当前链接库搜索的默认路径:
ld --verbose |grep SEARCH
ldconfig刷新动态库缓存
每次开机时系统自动运行ldconfig命令刷新动态链接库缓存/etc/ld.so.cache
当在动态库的默认路径下安装了一个新动态库时,如果没有刷新动态库缓存,ld就找不到这个新库,然后就报ld: undefined reference.
解决办法就是手动刷新缓存:
sudo ldconfig
CMakeLists指定链接搜索路径
上篇采用find_package()可以得到OpenCV等第三方库文件的名字<Package>_LIBRARIES
,而这些库文件一般通过make install
安装到/usr/local/lib
下了(比如在OpenCV编译安装的最后一步,在/etc/ld.so.conf.d/opencv.conf中配置/usr/local/lib),因此ld可以找到这些库文件。
如果库文件没有放在默认的库文件搜索路径下,比如需要链接/path_to_xxx/libxxx.so,则需要使用link_directories
指令:
link_directories(/path_to_xxx)
该命令相当于gcc -L/dir
后记
本篇与上篇关系紧密,是使用CMakeLists最容易报错的地方。如果出现连接问题,可以在CMakeLists.txt中多使用message()命令,打印出配置包的路径。
CMakeLists学习二、链接库搜索路径与ld相关推荐
- linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...
- adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
一.gcc编译过程 gcc -E hello.c -o hello.s //预处理 gcc -S hello.s -o hello.i //编译 gcc -c hello.i -o hello.o / ...
- linux c 编译时 include 和 链接库 文件路径指定
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...
- 关于环境变量 C++ include搜索路径,lib库搜索路径
OneCoder在学习C++的过程中,在研究Windows下Eclipse for C/C++开发环境的过程中遇到的一些关于C++环境变量的一些问题.在网上搜索一番,得到下面的文章,与大家分享. 转自 ...
- 环境变量,include搜索路径,lib库搜索路径
环境变量 系统环境变量 我们知道,我们经常要设置一些环境变量,系统环境变量我们非常容易理解.其实我们在windows中经常容易接触.其实环境变量是一个非常广泛的一个概念,它与web应用程序中的web. ...
- linux下运行时链接库的路径顺序
那么自制的库在没有指定运行时库的路径时,一般是不会找到你特定目录的,先来说说链接库的搜寻顺寻: 1.编译目标代码时指定的动态库搜索路径(指的是用-wl,rpath或-R选项而不是-L): exampl ...
- GDB动态库搜索路径
笔记: 当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-sea ...
- rpath添加依赖库搜索路径
windows 下一个程序的dll搜索路径首先是程序目录,然后是一些系统目录.linux 下的可以通过设置 LD_LIBRARY_PATH 等方法来添加搜索路径,但是这些路径是定死的,如果要实现程序目 ...
- Python批量添加库搜索路径
被win10 给坑了,换回Win7. 重装系统后,继续使用Python,Eclipse不用重装,pydev不用重装,只需重装Python2.7.6 X64 for win即可.然后,默认已安装的Pyt ...
最新文章
- java dagger2_从零开始搭建一个项目(rxJava+Retrofit+Dagger2) ---上
- 人工智能科普|自然语言处理(NLP)
- 36.迷宫(广度优先搜索)
- qt 判断ctrl键被按下_惊雷!证监会公告,又一家千亿白马股被按下“暂停键”...
- 网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
- 【转】解决svn Authorization failed错误
- PHP+Mysql高仿百度知道签到源码演示与下载
- 你们也只剩下点赞的交情
- 目标检测排行榜_3D领域重大突破!大华股份人工智能取得KITTI Object 3D车辆检测排行榜第一名...
- 使用hierarchyid查询分层数据
- 架构名词,涉及的技术
- Word 里面如何设置多级标题
- OA 系统中的流程管理
- iperf3网络测速
- 什么手机便签软件好用
- 学渣笔记——Java常用基本数据类型
- Excel字符函数(3):字符查找函数Find、Search
- jQuery制作手风琴图片切换效果
- 嵌入式1553B总线开发板的应用
- springboot微信点餐系统项目设计
热门文章
- 【Oracle】高级查询练习题详解
- 股市java_Java获取股市交易日
- 安装VMware15一直提示重启电脑
- 英文手写之意大利斜体
- 贷前审批策略的6个搭建思路
- 《联邦学习》——个人笔记(四)
- 批归一化作用_为什么数据要做归一化处理,什么是批归一化?
- 南大通用事务型数据库GBase 8s斩获2020年中国国际金融展“金鼎奖”
- 【gensim问题记录】EOFError: unexpected end of input; is count incorrect or file otherwise damaged?
- 微信小程序(八):地图