如何使用gcc在ubuntu下制作静态库共享库

问题描述:

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

感谢

+1

可能的重复http://*.com/questions/655163/convert-a-static-library-to-a-shared-library – 2010-04-15 06:29:27

重新编译包含在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归档 对于--whole存档选项后,在命令行中提到的每个存档,包括在归档中的每个对象文件链接,而不是在存档中搜索所需的目标文件。 这通常用于将档案文件转换为共享库,强制每个对象包含在生成的共享库中。此选项可能会多次使用。

+0

如果原始.a文件包含编译时没有fPIC的目标文件,新生成的相应.so文件能否正常工作? – solotim 2010-04-26 04:41:21

+1

@solotim - 我已经成功地在32位Linux上的共享对象中使用非PIC代码 - 尽管对于64位Linux来说可能并非如此。 – 2010-04-26 23:01:12