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

10 linker gcc shared-libraries

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

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

但是在这种情况下,a很难链接到foo.so作为绝对路径,如"ldd a"中所示:

/PATH/TO/FOO/foo.so

在最终部署中,两个文件最终都在同一个文件夹中,因此这应该是普通链接,而不是绝对路径.我怎样才能做到这一点?

Emp*_*ian 14

假设一个ELF平台,如果你可以重建foo.so:
- 最好的解决方案是简单地命名它libfoo.so
- 下一个最好的解决方案是设置SONAME它:

  gcc -Wl,-soname,foo.so -o foo.so foo.o
Run Code Online (Sandbox Code Playgroud)

当你以后链接:

  gcc -o a.out a.o /path/to/foo.so
Run Code Online (Sandbox Code Playgroud)

只会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
Run Code Online (Sandbox Code Playgroud)


小智 7

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

这似乎工作正常.希望有人觉得这很有用.