我在一个特殊目录中有一个共享对象库,我
现在,假设我编译了一个需要特殊库的程序,这是一个以典型的开源方式打包的程序./configure&& make等,并且它说-lspecialibrary无法找到,缺少任何上述检查的错误也可能抛出。
我所做的解决方法是将库符号链接到/ usr / local / lib64,然后突然找到库 ben。另外,在编译一个相对简单的包时,我手动添加-L / path /到/ spec / lib,这也有效。但我认为这两种方法都是黑客攻击,所以我一直在寻找任何线索,说明为什么我的检查列表不足以找到一个库。
(我特别发现浅层使用的$ LD_LIBRARY_PATH。实际上我可以从中排除某些库,它们仍然可以在编译过程中找到。)
答案 0 :(得分:4)
$LD_LIBRARY_PATH
和ldconfig
仅用于在运行需要库的程序时查找库,即加载程序而不是编译器使用它们。您的程序取决于libspeciallibrary.so。当运行时,您的计划$LD_LIBRARY_PATH
和ldconfig
会被查阅以查找libspeciallibary.so。
编译器不会使用这些方法来查找库。对于您的编译器,-L
选项是正确的方法。由于您的包使用自动工具,您应该设置$LDFLAGS
环境变量:
LDFLAGS=-L/path/to/lib ./configure && make
配置帮助中也记录了这一点:
./configure --help