对于一个项目,我们正在试图创建导出一组在特定函数的共享对象文件libname.exports
。 当然,我们知道,从该目标文件.so
文件被链接必须使用创建-fPIC
,让一直照顾。 然后,我们将目标文件组合成一个压缩文件名为libname.a
。 现在,这应该是基础的.so
要创建文件-或者说,他的想法。
我们传递libname.exports
到--retain-symbols-file
,所以预期的行为是,链接器会拉在任何的.a
有关这些符号的成员。
然而,输出nm libname.so
是空的。 在另一方面中grepping nm libname.a
显示,在名为相关符号libname.exports
在存在.a
成员。
现在,我绊了--whole-archive
,因此从调整的命令行:
gcc -o libname.so -shared -Wl,-z,defs,--retain-symbols-file,libname.exports,-L. libname.a -lc
至:
gcc -o libname.so -shared -Wl,-z,defs,--retain-symbols-file,libname.exports,-L.,--whole-archive,libname.a,--no-whole-archive -lc
这似乎具有从包括所有的目标文件的预期效果.a
(虽然大小差异奇怪)。 然而, nm libname.so
仍然给我任何输出。
如何使用归档文件创建仅在名为符号的共享对象libname.exports
可见?
不幸的是如何创建静态库的共享对象文件并没有完全回答我的问题。
注意:你问了。 背后使用的想法.a
文件作为输入,是因为它可以很容易地在使用模式规则GNUmakefile
而且由于.a
与文件-fPIC
不管是必要的。 不应该有单独的对象文件链接与存档文件之间的任何差异。