如何使用gcc在ubuntu下从静态库中创build共享库

我有一个静态库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手册页 (我强调):

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