动态库的搜索路径

33 篇文章 9 订阅
4 篇文章 1 订阅

简单整理一下,备忘;只关注Linux和Windows,其他情况不了解。dbzhang800 20110617

Windows

Windows下动态的库的搜索顺序,MSDN Dynamic-Link Library Search Order 中有详细的介绍。我们此处只关注比较正统的搜索顺序:

  • 包含可执行文件的目录
  • Windows的系统目录 (该目录可通过GetSystemDirectory得到)

  • 16位的系统目录 (即Windows目录下的system子目录)
  • Windows 目录 (该目录可通过GetWindowsDirectory得到)

  • 进行的当前工作目录
  • PATH环境变量中所列出的目录

注:工作目录位于Windows目录之后,这一改变始于 Windows Xp SP2.

Linux

注意:本部分内容不完全,如果你确实对此感兴趣,请考虑移步:http://blog.csdn.net/dbzhang800/article/details/6918413

动态库常规的搜索路径:

  • 程序构建时通过 RPATH 指定的目录
  • LD_LIBRARY_PATH 环境变量中冒号分割的目录
  • 文件 /etc/ld.so.cache列出的库(使用工具ldconfig维护)

  • 程序构建时 RUNPATH 指定的目录(fix me)
  • 目录 /lib

  • 目录 /usr/lib

注:RPATH似乎是很有争议的一个东西RpathIssue

ORIGIN

尽管有争议,我们还是可以想windows下一样,让程序从它所在的路径下加载动态库。

  • 直接调用编译器,使用 -Wl,-R,'$ORIGIN'

g++ hello.cpp -lmylib -Wl,-R,'$ORIGIN' -o hello
  • 编写makefile的话,使用 -Wl,-R,'$$ORIGIN'

all:
        g++ hello.cpp -lmylib -Wl,-R,'$$ORIGIN' -o hello
  • 使用qmake的话,我们需要在pro文件内添加
unix:!mac:QMAKE_LFLAGS += -Wl,--rpath=///$/$ORIGIN

-R后跟路径和--rpath= 是等价的写法

参考

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值