linux开发路径搜索

在windows下,如果一个可执行程序(exe)以来其他动态库组建,在运行时的搜索过程是先搜索exe同一目录路径,如果搜索不到再搜索环境变量Path所在目录路径,最后如果搜索不到再搜索system32目录所在路径;

      在linux下,开发过程中遇到的问题就是即使你将组建放在于可执行程序(随意格式)相同目录,运行可执行程序都无法跑起来!因为linux下默认的搜索路径是这样的:

(1)先搜索/lib和/usr/lib这两个目录  --->   (2) 然后按照 /etc/ld.so.conf里面的配置搜索绝对路径 (3) 同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过 设定它来查找除默认路径之外的其他路径。

    例如,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找(详细参考《使用LD_LIBRARY_PATH》)。不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运 行,所以多用在调试。(LD_LIBRARY_PATH的缺陷和使用准则,可以参考《WhyLD_LIBRARY_PATH is bad》 )。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路
径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。


    连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/-llibz-1.2.3   (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。



总结方式:

(1) 在/etc/ld.so.conf  (字面意思load so configuration 载入so动态库路径配置)文件中添加so所在目录路径,如/usr/lixx/workspace/demon

(2)  在runas配置中 environment环境变量中配置 LD_LIBRARY_PATH(载入库路径)赋值为所在目录路径,如${workspace_loc:/demon/debug}

(3)  在工程中将库路径写入可执行文件中,项目属性---C++ Build---Setting-->Tools settings----GCC C++ Linker -----Miscellaneous----Other Option ---Add 添加命令:

      -R${workspace_loc:/SimpleMath/Debug}

(4)  放在系统默认路径 /usr/lib  /usr/local/lib下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝壳里的沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值