如何使用gcc在ubuntu下制作静态库共享库
答
重新编译包含在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
可能的重复http://*.com/questions/655163/convert-a-static-library-to-a-shared-library – 2010-04-15 06:29:27