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