【问题标题】:How to resolve shared library linking during compilation( GCC )?如何在编译期间解决共享库链接(GCC)?
【发布时间】:2009-12-18 06:45:15
【问题描述】:

我已经构建了 libshared.so 依赖于 libshared_dependent.so

现在,我正在编译使用 libshared.soapp.bin,现在在编译时 gcc 要我指定 -lshared_dependent否则,它会给出一些符号未找到的错误。

有什么方法可以在编译时我不需要指定 -lshared_dependent,我希望只指定 -lshared 有效?

【问题讨论】:

  • @Sateesh 它需要我更改很多很多的makefile。我已经更改了一个共享文件的依赖关系,现在我不想更改其他项目的 makefile。
  • 但是为什么不想指定依赖库呢?

标签: gcc linker shared-libraries


【解决方案1】:

您只需在生成 libshared.so 时将 libshared.so 链接到 libshared_dependent.so。

gcc -shared -o libshared.so -lshared_dependant file1.o file2.o 

这样,当您将应用链接到 libshared.so 时,它也会链接到 libshared.so 所依赖的任何内容

【讨论】:

    【解决方案2】:

    您不需要将 app.bin 链接到 libshared_dependent.so。

    也就是说,链接器需要验证 libshared.so 中的符号是否可以找到,因此它需要找到 libshared_dependent.so 才能做到这一点。如果 libshared_dependent.so 与 libshared.so 位于不同的目录中,您将需要使用链接器选项 -rpath-link 指定 libshared_dependent.so 的路径。

    因为 -rpath-link 是一个链接器选项,你需要告诉 gcc 将它传递给链接器:

    gcc -Wl,-rpath-link,/directory-that-libshared_dependent-is-in
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多