我正在尝试将静态创建的.a
库与另一段C代码链接起来。
但是,在最终的可执行文件中,当使用nm
命令查看时,发现缺少几个符号(函数名称)。这是因为链接器(被调用的gcc
)正在剥离在与库链接的另一段C
代码中未引用的符号。我想用nm
命令查找的函数符号在.a
库中可见。
如何使链接器不剥离以这种方式省略的符号?
答案 0 :(得分:1)
通常,链接器会删除其他符号 - 主要用于
这里有两列思路:
从本质上讲,这两者是相互排斥的 - 你不能将两者结合起来。
所以这取决于您使用哪个开关来实现。通常,-g
开关用于在公开发布之前进行内部调试和测试。相反的是类似-O2
的东西,这使得编译器足够聪明,可以生成一个被认为是优化的可执行文件,例如删除死变量,展开循环等等。
希望这会有所帮助,并为您提供提示
答案 1 :(得分:1)
通常,您需要在应用程序中调用一些注册函数来生成此类引用。当然,如果您无权访问第一个库的代码,则只能使用tommieb75所描述的-g选项。
答案 2 :(得分:1)
使用-dynamic编译gcc以强制编译器包含所有符号。但要确保这是你真正想要的,因为这是浪费。
可能对某些静态工厂模式有用。