我在at& t样式中有以下汇编代码:
# asmFunc.asm
.global asmFunc
.section .text
asmFunc:
pushl %ebp
movl %esp, %ebp
addl $8,%ebp
movl %ebp, %eax
addl $4,%ebp
movl %ebp, %ebx
addl %eax,%ebx
movl %ebp, %esp
popl %ebp
ret
然后,我有一个cpp文件如下:
// main.cpp
#include <iostream>
extern "C" int asmFunc(int a, int b);
int main() {
int a,b;
std::cout << "Type in 1st num: \n" << std::endl;
std::cin >> a;
std::cout << "Type in 2nd num: \n" << std::endl;
std::cin >> b;
std::cout << "Assembly function asmFunc(" << a << ", " << b << ") is" << asmFunc(a,b) << std::endl;
return 0;
}
我使用“as asmFunc.asm -o asmFunc.o”编译汇编代码,这没有任何问题。使用“g ++ -c main.cpp -o main.o”编译cpp。当我尝试使用“g ++ main.o asnFunc.o -o start”链接文件时,我收到以下链接器错误:
(.text+0xb5): undefined reference to `asmFunc'
collect2: error: ld returned 1 exit status
这是为什么?我正在使用CygWin 32位来编译和链接源。