我有一个静态库libsrp.a,我想从它创建一个包含所有符号的共享库libsrp.so。请告诉我如何在ubuntu下制作.so。
感谢
答案 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选项后命令行中提到的每个归档,请在链接中包含归档中的每个目标文件,而不是在归档中搜索所需的目标文件。 这通常用于将存档文件转换为共享库,强制每个对象都包含在生成的共享库中。此选项可以多次使用。