gcc -static xxx.c -o xxx这样我就可以在没有任何外部依赖库的情况下运行xxx。
但是如果我想构建没有外部依赖库的共享库怎么办?我的意思是我想要 共享库静态链接其外部引用。
# 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 编译的。然而,apt-cache search libc pic确实给出了一些结果。
另请参阅:ELF 可执行文件或 .so 将首先在与其自身相同的目录中查找其依赖的 .so 文件:
echo '-Wl,--rpath=$ORIGIN'
`echo-rpath `
对象
libtool
,但后来决定将程序移植到 OS X 或 Windows,那么无论如何您最终都会重新发明它。