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

时间:2009-08-20 10:34:15

标签: gcc linker shared-libraries

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

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

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

/PATH/TO/FOO/foo.so

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

2 个答案:

答案 0 :(得分:13)

假设有一个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

答案 1 :(得分:7)

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

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