Tag:

在链接期间,库中的弱符号可以解决吗?

我的场景是关于交叉编译到Arduino Due(ARM目标),但我想这是一个通用的C弱符号问题。 我想将我的固件分成3个部分:1。硬件库(CMSIS,中间件) – > libHardware.a 2.实时操作系统库 – > libOS.a 3.应用程序代码 – > Output.elf链接到上面。 引用的CMSIS实现已声明如下: void SysTick_Handler ( void ) __attribute__ ((weak, alias(“Dummy_Handler”))); // …and a few dozen IRQ handler hook skipped for brevity CMSIS设计的想法是让应用程序代码有选择地实现和处理一些IRQ。 nm报告了libHardware.a startup_sam3xa.o: 00000000 W SysTick_Handler … 在我的场景中,我想在libOS.a中实现这些IRQ处理程序。 我实现了void SysTick_Handler(void),nm报告: cortex_handlers.o: 00000000 T SysTick_Handler …. 然后我将它们连接在一起,这基本上归结为 g++ -o app.elf -Wl,–start-group app.o […]

如何与GCC进行弱连接工作?

似乎有3种方式告诉GCC弱连接符号: __attribute__((weak_import)) __attribute__((weak)) #pragma weak symbol_name 这些都不适合我: #pragma weak asdf extern void asdf(void) __attribute__((weak_import, weak)); … { if(asdf != NULL) asdf(); } 我总是得到这样的链接错误: 未定义的符号: “_asdf”,引自: _asdf $ non_lazy_ptr在ccFA05kN.o中 ld:找不到符号 collect2:ld返回1退出状态 我在OS X 10.5.5上使用GCC 4.0.1。 我究竟做错了什么?