【问题标题】:shared library problems on linuxlinux上的共享库问题
【发布时间】:2008-10-12 17:30:09
【问题描述】:

我正在尝试在 linux 系统上编译/链接一个非常旧的软件,但由于某种原因,我无法与安装在我系统上的共享库链接。

我从链接器收到以下错误:

/usr/bin/ld: cannot find -lXaw

但是,lib 本身已安装。如果我运行

ldconfig -v | grep libXaw

我得到了(除其他外)这个命中:

libXaw.so.7 -> libXaw7.so.7.0.0

该库及其链接位于 /usr/lib 顺便说一句。所以没什么特别的。

所以库就在那里,ldconfig 找到了它。什么会导致 ld 在链接时找不到库?正如您可能已经猜到的那样,我对共享库的东西很陌生。

有什么想法吗?

【问题讨论】:

    标签: linux gcc shared-libraries


    【解决方案1】:

    链接器可能正在寻找“libXaw.so”。是在 /usr/lib 中吗?如果没有,您可以尝试将其添加为 libXaw7.so.7.0.0 中的另一个软链接。

    【讨论】:

    • 谢谢,该链接已修复。你知道为什么它首先是必要的吗?其他具有类似命名方案的库可以正常工作。
    • 通常在大多数发行版(例如 libxaw-dev)的开发包中都提供了 .so 符号链接。这可能是你的情况吗?
    • 你能举个具体的例子吗?如:我与 -lfoo 链接很好,但我的系统上没有 libfoo.so 或 libfoo.a,只有一个 libfoo.so.1.0。
    【解决方案2】:

    符号链接 btw 的原因是在多个版本的情况下选择要链接的默认版本,请记住库的名称已集成到二进制文件中。 (您可以使用 ldd 看到)。

    【讨论】:

      【解决方案3】:

      -L 库目录是否被覆盖,它不在 /usr/lib 中查找?

      【讨论】:

        【解决方案4】:

        要链接它,您需要 .a 文件,而不是 .so 文件,它是运行时库。共享对象仅对已经链接到库的非共享部分的程序有用。这通常分布在“.a”文件中。

        【讨论】:

        • 嗯,这在 Windows 上可能是正确的,但在 Linux 上,您通常链接到共享库本身。
        • 混淆可能源于.lib 用于表示静态库和导入库(据我了解,后者是共享库的链接时“代理”)。跨度>
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多