【问题标题】:Why can't ld find library from path in /etc/ld.so.conf?为什么 ld 无法从 /etc/ld.so.conf 的路径中找到库?
【发布时间】:2014-12-01 07:36:55
【问题描述】:

我想将/opt/vertica/lib64 添加到系统库路径中,所以我执行以下步骤:
(1) 将/opt/vertica/lib64 添加到/etc/ld.so.conf,然后运行ldconfig
(2) 检查:

 bash# ldconfig -p | grep vertica
    libverticaodbc.so (libc6,x86-64) => /opt/vertica/lib64/libverticaodbc.so
    ......

但是当我运行“ld -lverticaodbc --verbose”命令时:

==================================================
attempt to open /usr/x86_64-redhat-linux/lib64/libverticaodbc.so failed
attempt to open /usr/x86_64-redhat-linux/lib64/libverticaodbc.a failed
attempt to open /usr/local/lib64/libverticaodbc.so failed
attempt to open /usr/local/lib64/libverticaodbc.a failed
attempt to open /lib64/libverticaodbc.so failed
attempt to open /lib64/libverticaodbc.a failed
attempt to open /usr/lib64/libverticaodbc.so failed
attempt to open /usr/lib64/libverticaodbc.a failed
attempt to open /usr/x86_64-redhat-linux/lib/libverticaodbc.so failed
attempt to open /usr/x86_64-redhat-linux/lib/libverticaodbc.a failed
attempt to open /usr/lib64/libverticaodbc.so failed
attempt to open /usr/lib64/libverticaodbc.a failed
attempt to open /usr/local/lib/libverticaodbc.so failed
attempt to open /usr/local/lib/libverticaodbc.a failed
attempt to open /lib/libverticaodbc.so failed
attempt to open /lib/libverticaodbc.a failed
attempt to open /usr/lib/libverticaodbc.so failed
attempt to open /usr/lib/libverticaodbc.a failed
ld: cannot find -lverticaodbc

ld 没有从 /opt/vertica/lib64 中找到 verticaodbc

谁能提供一些线索?非常感谢!

【问题讨论】:

    标签: c linux gcc linker ld


    【解决方案1】:

    ld静态 linkerld.sodynamic linker(而ldconfig & ldd 与动态链接器相关)。

    您需要在链接时将-L/opt/vertica/lib64/ 添加到您的ld 参数中(并且您通常应该使用gccg++ 链接)。实际上,这意味着编辑您的构建基础架构 - 例如你的Makefile - 添加几十个字符。

    ld.so(8)ldd(1)ld(1)ldconfig(8)

    另请阅读Drepper's paper: How To Write Shared LibrariesProgram Library HowToLevine's book: Linkers and Loaders

    【讨论】:

    • 有没有不明确使用“-L/opt/vertica/lib64/”的方法?除了添加到LD_LIBRARY_PATH
    • 不,但为什么与-L/opt/vertica/lib64/ 链接是个问题?只需编辑您的 Makefile
    • 只是觉得不是一种优雅的方式。如果库路径改变,Makefile 也需要修改。在 Solaris 上,有 crle
    • 然后,改进ld 以满足您的需求。 binutils 是免费软件,你可以改进它(只要你遵守 GPL 许可)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2013-08-21
    • 2012-07-24
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多