我正在尝试使用Waf编译依赖于Caffe的程序(不是我的程序,只是尝试构建它)。在链接期间,我收到了错误
/ usr / bin / ld:找不到-lcaffe
所以我加了……
链接怎么可能成功,但二进制文件找不到库?
与...联系 /usr/bin/ld 就是所谓的静态链接(不要与全静态链接混淆,通过使用实现 -static 旗)。
/usr/bin/ld
-static
什么时候你的图书馆 安装 在系统的标准位置(例如,在 /usr/lib ),一切正常。当你这样做 不 安装 libcaffe.so 在标准的地方,你需要知道(更多)你在做什么。
/usr/lib
libcaffe.so
您可以使用以下命令指示静态链接器搜索库的其他目录 -L /path/to/dir 链接器标志。这使您可以实现成功的静态链接,并让您为下一步做好准备......
-L /path/to/dir
...这称为运行时加载。运行时加载由完全不同的程序执行(例如, /lib/ld-linux.so.2 在Linux上)。
/lib/ld-linux.so.2
运行时加载程序再次加载程序没有问题 libcaffe.so 如果后者安装在标准位置。但是当它没有安装在标准位置时,需要告诉装载器在哪里找到 libcaffe.so 。这样做有几种特定于系统的方法。
许多UNIX运行时加载器都要注意 LD_LIBRARY_PATH 环境变量。
LD_LIBRARY_PATH
有可能编译 DT_RUNPATH 要么 DT_RPATH 进入程序本身,例如 -Wl,-rpath=/path/to/dir 或类似的静态链接器参数。
DT_RUNPATH
DT_RPATH
-Wl,-rpath=/path/to/dir
在某些系统上,可以通过编辑修改“系统”位置(默认搜索) /etc/ld.so.conf 要么 /etc/ld.so.conf.d/... 文件。
/etc/ld.so.conf
/etc/ld.so.conf.d/...