У меня есть следующий код ассемблера в&т стиль:
# 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;
}
Я компилирую ассемблерный код с «asmFunc.asm -o asmFunc.o», который не вызывает проблем. Cpp компилируется с использованием «g ++ -c main.cpp -o main.o». Когда я пытаюсь связать файлы, используя «g ++ main.o asnFunc.o -o start», я получаю следующую ошибку компоновщика:
(.text+0xb5): undefined reference to `asmFunc'
collect2: error: ld returned 1 exit status
Почему это? Я использую 32-битный CygWin для компиляции и компоновки исходников.
Задача ещё не решена.
Других решений пока нет …