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