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.
这似乎工作正常.希望有人觉得这很有用.
归档时间: |
|
查看次数: |
18577 次 |
最近记录: |