一尘不染

可以使用静态链接使用的库来构建共享库吗?

linux

我可以使用带有静态链接的gcc构建可执行文件:

gcc-静态xxx.c -o xxx

所以我可以在没有任何外部依赖库的情况下运行xxx。

但是,如果我要构建没有外部依赖库的共享库怎么办?我的意思是我希望共享库静态链接其外部引用。


阅读 238

收藏
2020-06-07

共1个答案

一尘不染

这将起作用:

# Generate position independent code (PIC)
gcc -fPIC -c -o xxx.o xxx.c

# Build a shared object and link with static libraries
ld -shared -static -o xxx.so xxx.o

# Same thing but with static libc
ld -shared -static -o xxx.so xxx.o -lc

需要说明的是:-static标志(如果提供给gcc)会传递给链接器(ld),并告诉它与库的静态版本(.a)(由-l标志指定)一起使用,而不是与动态版本(.so)。

另一件事:在我的系统(Debian)上,最后一个示例给出了 libc.a … … -fPIC 错误 重新编译
。可以肯定的是,这意味着我系统上的libc.a没有使用-fPIC进行编译。一个 容易缓存搜索libc中石化 确实然而给予了一定的成效。

另请参阅:程序库HOWTOSO:组合.so
libs
ld(1)gcc(1)

2020-06-07