【发布时间】:2013-11-04 10:02:19
【问题描述】:
我有一个程序,我用 2 个不同的编译器编译:
适用于 PowerPC 的 GCC 3.4.4 交叉编译器
GCC 4.8.1 MinGW 编译器
在程序中,我使用了汇编指令 .weak 。文档说:
Makes a symbol with weak binding globally visible to the linker.
所以我会这样:
__asm__(".weak " "foo" "\n.set " "foo" "," "dummy_foo" "\n");
清除foo 弱并将其别名为dummy_foo。
当我交叉编译 für PowerPC 时,此代码在 GCC 3.4.4 下运行良好,但当我为 x86 目标编译时,它不适用于 GCC 4.8.1。 - 代码编译,但 foo 未声明 weak 并且我的链接器给了我一个未定义的引用。这里有什么问题?
//编辑:
正如 BSH 所建议的,它必须是:
__asm__(".weak " "_foo" "\n.set " "_foo" "," "_dummy_foo" "\n");
如果我将此行放入与 foo() 声明相同的 C 文件中,它可以正常工作。当我将它放在单独的 C 文件中时,问题仍然存在(然后它适用于 GCC 3.4.4 交叉编译器,但不适用于 GCC 4.8.1)
【问题讨论】:
标签: c gcc assembly linker weak-references