【发布时间】:2011-02-08 05:55:03
【问题描述】:
我有一个静态库 libsrp.a,我想从中创建一个包含所有符号的共享库 libsrp.so。请告诉我如何在ubuntu下制作.so。
谢谢
【问题讨论】:
我有一个静态库 libsrp.a,我想从中创建一个包含所有符号的共享库 libsrp.so。请告诉我如何在ubuntu下制作.so。
谢谢
【问题讨论】:
使用标志重新编译包含在 libsrp.a 中的目标文件以创建与位置无关的代码 (fpic),如
gcc -fpic -c foo.c
gcc -fpic -c bar.c
现在您可以将 foo.o 和 bar.o 组合成一个共享库,就像在
中一样gcc -shared -o libshared.so foo.o bar.o
【讨论】:
使用--whole-archive 标志:
gcc -shared -o libsrp.so -Wl,--whole-archive -lsrp -Wl,--no-whole-archive
来自ld man page(我的重点):
--整个存档 对于命令行中在 --whole-archive 选项之后提到的每个存档,在链接中包含存档中的每个目标文件,而不是在存档中搜索所需的目标文件。 这通常用于将存档文件转换为共享库,强制将每个对象包含在生成的共享库中。此选项可以多次使用。
【讨论】: