如何使用gcc从ubuntu下的静态库创建共享库

时间:2010-04-15 06:22:45

标签: ubuntu shared-libraries

我有一个静态库libsrp.a,我想从它创建一个包含所有符号的共享库libsrp.so。请告诉我如何在ubuntu下制作.so。

感谢

2 个答案:

答案 0 :(得分:3)

使用标志重新编译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

答案 1 :(得分:2)

使用--whole-archive标志:

gcc -shared -o libsrp.so -Wl,--whole-archive -lsrp -Wl,--no-whole-archive

ld man page(我的重点):

  

- 全归档       对于--whole-archive选项后命令行中提到的每个归档,请在链接中包含归档中的每个目标文件,而不是在归档中搜索所需的目标文件。 这通常用于将存档文件转换为共享库,强制每个对象都包含在生成的共享库中。此选项可以多次使用。