使用 Waf 编译时无法正确链接库
Can't properly link libraries when compiling with Waf
我正在尝试编译一个依赖于 Waf 的 Caffe 的程序(不是我的程序,只是试图构建它(。在链接过程中,我收到错误
/usr/bin/ld: cannot find -lcaffe
所以我在wscript
中添加了libcaffe.so
路径以obj.libpath
并编译了它。然而,当我运行编译的二进制文件时,我收到一个错误,告诉我它找不到libcaffe.so
。怎么可能链接成功,但二进制文件找不到库?
怎么可能链接成功,但二进制文件找不到库?
与/usr/bin/ld
链接就是所谓的静态链接(不要与使用-static
标志实现的全静态链接混淆(。
当您的库安装在系统上的标准位置(例如/usr/lib
(时,一切正常。当您不在标准位置安装libcaffe.so
时,您需要知道(更多(您在做什么。
可以指示静态链接器使用 -L /path/to/dir
链接器标志在其他目录中搜索库。这使您可以实现成功的静态链接,并为您下一步做好准备...
。这称为运行时加载。运行时加载由完全不同的程序执行(例如 /lib/ld-linux.so.2
在Linux上(。
运行时加载程序再次加载程序没有问题,如果后者安装在标准位置,则libcaffe.so
。但是当它没有安装在标准位置时,需要告诉装载机在哪里可以找到libcaffe.so
。有几种特定于系统的方法可以执行此操作。
许多 UNIX 运行时加载程序关注LD_LIBRARY_PATH
环境变量。
可以将DT_RUNPATH
或DT_RPATH
编译到程序本身中,例如 -Wl,-rpath=/path/to/dir
或类似的静态链接器参数。
在某些系统上,可以通过编辑/etc/ld.so.conf
或/etc/ld.so.conf.d/...
文件来修改"系统"位置(默认情况下搜索
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 如何使用 WAF 链接静态库?
- 将本地共享库与Waf链接(无库编译)
- 使用waf构建系统将程序与Boost.Asio链接
- 链接Waf目标到由外部构建系统(CMake)生成的库
- 使用 Waf 编译时无法正确链接库
- 链接时的 WAF:"undefined reference"错误