Gcc 如何链接到不同目录中没有lib*前缀的共享库?

Gcc 如何链接到不同目录中没有lib*前缀的共享库?,gcc,linker,shared-libraries,Gcc,Linker,Shared Libraries,我必须将代码链接到没有lib前缀的共享库。(比如foo.so)第一个问题是-l选项找不到文件。因此,我尝试将此文件直接包含到最后一次编译中,如下所示: gcc a a.o/PATH/TO/FOO/FOO.so 但在本例中,a与foo是硬链接的。因此,如“ldd a”中所示,a是一条绝对路径: /路径/TO/FOO/FOO.so 在最终部署中,这两个文件最终将位于同一文件夹中,因此这应该是正常链接,而不是绝对路径。我该怎么做?-Wl,-rpath,。-->使用当前目录搜索库文件。(即使在编译中找不

我必须将代码链接到没有lib前缀的共享库。(比如foo.so)第一个问题是-l选项找不到文件。因此,我尝试将此文件直接包含到最后一次编译中,如下所示:

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

但在本例中,a与foo是硬链接的。因此,如“ldd a”中所示,a是一条绝对路径:

/路径/TO/FOO/FOO.so

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

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


这似乎是正确的。希望所有人都觉得这很有用。

假设有一个ELF平台,如果你能重建
foo。所以

-最好的解决方法是简单地将其命名为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