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

Sam*_*iao 13 c linux compiler-construction gcc

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

gcc -static xxx.c -o xxx

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

但是,如果我想构建没有外部依赖库的共享库呢?我的意思是我希望共享库静态链接其外部引用.

Ins*_*lah 13

这将有效:

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

澄清:-static标志,如果给予gcc,则传递给链接器(ld)并告诉它使用库的静态版本(.a)(使用-l标志指定),而不是动态版(.so).

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

另请参见:程序库HOWTO,SO:组合.so libs,ld(1),gcc(1)