我正在尝试使用 MASM 汇编一小段汇编代码,然后将其与 C++ 程序链接。这是汇编代码:
.code
option casemap:none
public asmFunc
asmFunc PROC
ret ;
asmFunc ENDP
END
这是cpp代码:
#include <stdio.h>
extern "C" {
void asmFunc(void);
}
int main() {
printf("Calling asm main!");
asmFunc();
printf("Returned from asm!");
return 0;
}
然后我使用
ml64 /c first.asm
成功地组装了汇编代码。创建了 .obj 文件。
然后我期望我可以使用
cl first.cpp first.asm
轻松链接代码,但不幸的是我遇到了这个错误:
C:\Users\jarzi\Videos\Programs\c programs\assem1>cl first.cpp first.asm
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.00.24215.1 для x64
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
cl: командная строка warning D9024: нераспознанный тип исходных файлов "first.asm", использование объектного файла
first.cpp
first.cpp(1): fatal error C1034: stdio.h: не указан путь поиска включаемых файлов
链接器不链接代码,它链接目标文件。
cl
命令不是链接器。
您需要执行以下操作:
.asm
文件组装成 .obj
文件.cpp
文件编译为另一个 .obj
文件.obj
文件链接在一起并生成可执行文件。当然,要实现此目的,您最好为源文件指定不同的名称,否则您的
first.cpp
将生成 first.obj
,然后您的 first.asm
也会生成 first.obj
,因此第二个 first.obj
将覆盖第一个 first.obj
,您将永远不会有两个 .obj
文件需要链接。