在Linux中静态链接库

3

我有一个应用程序,它链接到许多库,其中大部分在我的机器上都可以作为静态库和动态库使用。以下是ldd命令的输出。

linux-gate.so.1 =>  (0xffffe000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0xb782c000)
libc.so.6 => /lib/libc.so.6 (0xb76cc000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb755a000)
/lib/ld-linux.so.2 (0xb788d000)
libdl.so.2 => /lib/libdl.so.2 (0xb7555000)
libz.so.1 => /lib/libz.so.1 (0xb7540000)

我想静态链接libssl库,但根据gcc文档,默认情况下它会动态链接每个库。有什么方法可以告诉gcc将特定的库静态链接,即使其动态版本也在系统上可用?


https://dev59.com/E3RA5IYBdhLWcg3w0xnk 回答了这个问题。 - Habbie
1个回答

4

gcc有一个-static标志。


但这将强制所有库静态链接。我想要将一些库静态链接,而将另一些库动态链接。 - Ravi Gupta
3
-static关键字会强制将其后面的库静态链接。-dynamic标志同理。这样,您可以指定哪些库进行动态链接,哪些库进行静态链接。 - rgngl
@bad zeppelin:你能给我们举个例子吗? - jyz
gcc a.o b.o ... z.o -Wl,-B,static -lfoo -Wl,-B,dynamic -lbar将 a.o b.o ... z.o 编译为可执行文件,使用静态链接库 libfoo.a 和动态链接库 libbar.so。 - rgngl
如果您想将某些库静态链接,而另一些库动态链接,则几年前 - 对于这种情况只有一个解决方案 - 重命名您的静态库... - Konstantin Burlachenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接