我必须将我的代码链接到没有lib前缀的共享库。 (比方说,foo.so)第一个问题是-l选项找不到文件。所以我尝试直接将这个文件包含在最后一个编译中:
gcc a a.o /PATH/TO/FOO/foo.so
但是在这种情况下,a很难链接到foo.so作为绝对路径,如“ldd a”所示:
/PATH/TO/FOO/foo.so
在最终部署中,两个文件最终都在同一个文件夹中,因此这应该是普通链接,而不是绝对路径。我怎么能这样做?
答案 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。
这似乎工作正常。希望有人觉得这很有用。