为什么在正确设置LD-LIBRARY_PATH和ld.so.cache后仍然存在库查找问题?

时间:2010-09-02 11:18:41

标签: linux compilation

我在一个特殊目录中有一个共享对象库,我

  • 确保特殊目录位于$ LD_LIBRARY_PATH
  • 确保此目录已读取并执行所有
  • 的权限
  • 确保ld.so.conf中有相应的库目录,并且root已经完成了ldconfig (通过使用ldconfig -p作为normaluser检查库来验证。
  • 确保它没有soname问题(例如,如果需要,创建一些符号链接)

现在,假设我编译了一个需要特殊库的程序,这是一个以典型的开源方式打包的程序./configure&& make等,并且它说-lspecialibrary无法找到,缺少任何上述检查的错误也可能抛出。

我所做的解决方法是将库符号链接到/ usr / local / lib64,然后突然找到库 ben。另外,在编译一个相对简单的包时,我手动添加-L / path /到/ spec / lib,这也有效。但我认为这两种方法都是黑客攻击,所以我一直在寻找任何线索,说明为什么我的检查列表不足以找到一个库。

(我特别发现浅层使用的$ LD_LIBRARY_PATH。实际上我可以从中排除某些库,它们仍然可以在编译过程中找到。)

1 个答案:

答案 0 :(得分:4)

$LD_LIBRARY_PATHldconfig仅用于在运行需要库的程序时查找库,即加载程序而不是编译器使用它们。您的程序取决于libspeciallibrary.so。当运行时,您的计划$LD_LIBRARY_PATHldconfig会被查阅以查找libspeciallibary.so。

编译器不会使用这些方法来查找库。对于您的编译器,-L选项是正确的方法。由于您的包使用自动工具,您应该设置$LDFLAGS环境变量:

LDFLAGS=-L/path/to/lib ./configure && make

配置帮助中也记录了这一点:

./configure --help