【问题标题】:Why ldconfig doesn't link or cache my library?为什么 ldconfig 不链接或缓存我的库?
【发布时间】:2019-06-08 18:11:27
【问题描述】:

我使用的是 Ubuntu 18.04、GCC 7.4

我创建了一个测试共享库,然后将其复制到 /usr/local/lib/ .so 文件是这样创建的:

gcc -Wall -fPIC -c src/Test.cpp -o obj/Test.o
gcc -shared -Wl,-soname,libhztest.so -o bin/libhztest.so obj/*.o
sudo cp bin/libhztest.so /usr/local/lib/hazeltest/
sudo chmod 777 /usr/local/lib/hazeltest/

然后我创建了一个测试应用程序并尝试运行它,我得到: 加载共享库时出错:libhztest.so:无法打开共享对象文件:没有这样的文件或目录

如果我确实导出了正确的 LD_LIBRARY_PATH 并且它可以工作,但我更喜欢使用 ldconfig

不幸的是,即使目录 /usr/local/lib/ 很好地包含在 /etc/ld.so.conf 中,ldconfig 似乎也没有链接我的库

谁能告诉我为什么这不起作用?谢谢

【问题讨论】:

  • 在我的情况下,我错误地设置了 SONAME。通过查看sudo ldconfig -v 的输出找到它。

标签: gcc linker shared-libraries ubuntu-18.04


【解决方案1】:

您需要将其复制到/usr/local/lib/,而不是/usr/local/lib/hazeltest/。要么,要么将/usr/local/lib/hazeltest/ 添加到/etc/ld.so.conf。 (尽管我认为您应该将其添加到 /etc/ld.so.conf.d/ 的新文件中,例如 /etc/ld.so.conf.d/hazeltest.conf,这样您就不会直接修改 ld.so.conf 这可能是一个自动生成的文件)。

【讨论】:

    【解决方案2】:

    我终于让它运行命令了:

    sudo ldconfig /usr/local/lib/hazeltest/
    

    【讨论】:

    • 这只是暂时的。 ld.so.cache 将在下次系统运行 ldconfig 时被覆盖(例如在安装新软件包时)。请参阅我的答案以获得正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多