博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下动态库/静态库 链接路径设置问题
阅读量:4154 次
发布时间:2019-05-25

本文共 815 字,大约阅读时间需要 2 分钟。

g++/gcc 连接 so动态库或者 .a静态库时,需要设置这些动态库的路径, 例如:

g++ -o main main.cpp -L./lib -ldymamic -lpthread -lrt  这些是设置到哪个目录下去查找关联的动态库。 如果在-L目录下面找不到相应的动态库,就会到 LD_LIBRARY_PATH 的目录下去找,如果还找不到,就会到/usr/lib 目录下去找。

而如果要关联静态库,例如: g++ -o main main.cpp -L./lib -ldymamic ./lib/libstatic.a 。 请注意这个静态库的路径。 对于静态库,是需要详细标明这个静态库的路径的, 因为-L后面设置的路径,对于静态库来说是无效的。

现在谈另外一个问题:

g++ -o main main.cpp -L./lib -ldymamic -lpthread -lrt 编译成功后, ./main 运行程序会报错, 提示找不到 libdymamic.so动态库。 因为使用这种方式,需要额外的设置:

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib ,之后运行main就可以正常运行了。

当然,你也可以直接这样写:

g++ -o main main.cpp /home/****/libdynamic.so -lpthread -lrt , 直接写动态库的绝对路径。 这样就不需要设置LD_LIBRARY_PATH。 但这样有一个缺陷: 这个so必须放在绝对路径下,不能放到其他地方。 这种写法很不好,不提倡。

动态库搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径。像前面提到的 -L./lib 是属于链接时期的搜索路径,即给ld程序提供的编译链接时候寻找动态库路径;而 LD_LIBRARY_PATH则既属于链接期搜索路径,又属于运行时期的搜索路径。

转载地址:http://glrti.baihongyu.com/

你可能感兴趣的文章
深入入门正则表达式(java) - 命名捕获
查看>>
使用bash解析xml
查看>>
android系统提供的常用命令行工具
查看>>
【Python基础1】变量和字符串定义
查看>>
【Python基础2】python字符串方法及格式设置
查看>>
【Python】random生成随机数
查看>>
【Python基础3】数字类型与常用运算
查看>>
【Python基础4】for循环、while循环与if分支
查看>>
【Python基础6】格式化字符串
查看>>
【Python基础7】字典
查看>>
【Python基础8】函数参数
查看>>
【Python基础9】浅谈深浅拷贝及变量赋值
查看>>
Jenkins定制一个具有筛选功能的列表视图
查看>>
【Python基础10】探索模块
查看>>
【Python】将txt文件转换为html
查看>>
[Linux]Shell脚本实现按照模块信息拆分文件内容
查看>>
idea添加gradle模块报错The project is already registered
查看>>
在C++中如何实现模板函数的外部调用
查看>>
在C++中,关键字explicit有什么作用
查看>>
C++中异常的处理方法以及使用了哪些关键字
查看>>