【问题标题】:How to link to a shared library without lib* prefix in a different directory? [duplicate]如何链接到不同目录中没有 lib* 前缀的共享库? [复制]
【发布时间】:2010-11-21 06:34:24
【问题描述】:

我必须将我的代码链接到不带 lib 前缀的共享库。 (比如 foo.so) 第一个问题是 -l 选项找不到文件。所以我尝试像这样直接将这个文件包含到最后的编译中:

gcc a.o /PATH/TO/FOO/foo.so

但在这种情况下,a 硬链接到 foo.so 作为绝对路径,如“ldd a”中所示:

/PATH/TO/FOO/foo.so

在最终部署中,两个文件最终会位于同一个文件夹中,因此这应该是正常链接,而不是绝对路径。我该怎么做?

【问题讨论】:

    标签: gcc linker shared-libraries


    【解决方案1】:

    假设一个ELF平台,如果你能重建foo.so:
    - 最好的解决方法是简单地将其命名为 libfoo.so
    - 下一个最佳解决方法是在其上设置SONAME

      gcc -Wl,-soname,foo.so -o foo.so foo.o
    

    当您稍后链接时:

      gcc -o a.out a.o /path/to/foo.so
    

    只有SONAME 将被记录为依赖项,而不是完整的/path/to/foo.so

    如果您无法重建 foo.so,请执行以下操作:

      rm -f foo.so && ln -s /path/to/foo.so foo.so &&
      gcc -o a.out a.o ./foo.so && rm -f foo.so
    

    【讨论】:

      【解决方案2】:

      -Wl,-rpath,。 --> 使用当前目录搜索 lib 文件。 (即使在编译中没有找到,在运行时也可以) 而不是 -llibrary --> 使用 library.so。

      这似乎工作正常。希望任何人都觉得这很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 2012-05-19
        相关资源
        最近更新 更多