我建立使用GCC 3.4.0的可执行文件。目标是嵌入式系统。我一直在使用一种模块化的方式来定义“控制台命令处理程序”,方法是在任何编译单元中定义一个指向处理程序的函数指针,使其位于某个链接器部分。在运行时,当在控制台上输入一条命令时,我可以循环遍历“控制台处理程序数据部分”中的所有处理程序,而无需具有对每个处理程序的引用的中央表。链接抛出未定义的符号
聪明机灵的权利,以及现在它咬我。当我在没有其他外部引用符号的c文件中执行此操作时(例如,我的处理程序是唯一的函数),链接程序将其全部抛出。我的处理程序不包含在最终的可执行文件中,编译单元中也没有其他任何东西。
- 黑客是在c文件中定义一个虚拟的全局变量,并在别处引用它,然后我的处理程序在它的特殊数据部分,包括在内。
- 我还可以用-u到链接器和它的作品,但吹模块化的目标。
- 我使用我的回调属性((使用)),没有运气尝试 - 似乎被忽略。
- 我的特殊部分有KEEP规范,但这样做没有帮助。
任何想法?
感谢, 库尔特
感谢您的回复。不幸的是,我相信所有这些选项都需要明确命名每个函数指针,以便将它保存在二进制文件中。这就损害了模块化的链接器部分的目的,否则我只会制作一个中央表格并完成它。 我真的需要一些方法来告诉它永远不会扔掉链接到某个部分的符号。 –