【问题标题】:why after setting LD-LIBRARY_PATH and ld.so.cache properly, there are still library-finding problems?为什么正确设置 LD-LIBRARY_PATH 和 ld.so.cache 后,仍然存在找库问题?
【发布时间】:2014-05-02 20:13:46
【问题描述】:

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

  • 确保特殊目录位于 $LD_LIBRARY_PATH 中
  • 确保此目录对所有人都有读取和执行权限
  • 确保适当的库目录位于 ld.so.conf 中,并且该 root 已完成 ldconfig (通过使用 ldconfig -p 作为普通用户检查库来验证。
  • 确保它没有 soname 问题(即,如有必要,创建一些符号链接)

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

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

(我特别发现 $LD_LIBRARY_PATH 是浅使用的,其实我可以排除某些库,在编译过程中仍然会找到)。

【问题讨论】:

    标签: linux compilation


    【解决方案1】:

    $LD_LIBRARY_PATHldconfig 仅用于在运行需要库的程序时定位库,即它们由加载器使用而不是编译器。您的程序依赖于 libspeciallibrary.so。当运行你的程序 $LD_LIBRARY_PATHldconfig 被咨询以找到 libspeciallibary.so。

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

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

    这也记录在配置帮助中:

    ./configure --help
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2017-08-30
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多