【发布时间】:2014-11-17 00:28:00
【问题描述】:
全部,
我目前正在将我们使用的编译器更改为 MingGw。此时我让 MinGw 编译所有文件,但我无法将它链接到我拥有的程序集文件中。我已经检查并且程序集文件已编译为目标文件。我还使用“-verbose”选项检查了这些目标文件是否包含在链接过程中。然而,我得到的只是关于“未定义的引用....”的错误消息一遍又一遍。
我不确定我缺少什么才能让程序集文件正确链接。任何帮助将不胜感激!
【问题讨论】:
全部,
我目前正在将我们使用的编译器更改为 MingGw。此时我让 MinGw 编译所有文件,但我无法将它链接到我拥有的程序集文件中。我已经检查并且程序集文件已编译为目标文件。我还使用“-verbose”选项检查了这些目标文件是否包含在链接过程中。然而,我得到的只是关于“未定义的引用....”的错误消息一遍又一遍。
我不确定我缺少什么才能让程序集文件正确链接。任何帮助将不胜感激!
【问题讨论】:
asm 文件中的符号名称是否以 _(下划线)开头?例如,以下使用来自 MinGW-W64 的 gcc 4.9.2 编译的示例在 32 位 XP 上按预期工作:
----- 文件 asmtest.c -----
#include <stdio.h>
extern int add(int x, int y);
int main(int argc, char *argv[])
{
printf("The result is: %d\n", add(3, 5));
return 0;
}
----- 文件 asmadd.S -----
.section .text
.global _add
_add:
movl 4(%esp), %eax
movl 8(%esp), %ebx
addl %ebx, %eax
ret
--编译命令-----
gcc -Wall -o asmtest asmtest.c asmadd.S
【讨论】: