我有一个程序,我用 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");
如果我将此行放入与我的声明相同的 C 文件中,foo()
则可以正常工作。当我将它放在单独的 C 文件中时问题仍然存在(然后它适用于 GCC 3.4.4 交叉编译器,但不适用于 GCC 4.8.1 )