将 cpp 代码与汇编代码链接时遇到致命错误

问题描述 投票:0回答:1

我正在尝试使用 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: не указан путь поиска включаемых файлов

c++ assembly masm masm64
1个回答
0
投票

链接器不链接代码,它链接目标文件。

cl
命令不是链接器。

您需要执行以下操作:

  1. 调用汇编器将
    .asm
    文件组装成
    .obj
    文件
  2. 调用编译器将
    .cpp
    文件编译为另一个
    .obj
    文件
  3. 调用链接器将两个
    .obj
    文件链接在一起并生成可执行文件。

当然,要实现此目的,您最好为源文件指定不同的名称,否则您的

first.cpp
将生成
first.obj
,然后您的
first.asm
也会生成
first.obj
,因此第二个
first.obj
将覆盖第一个
first.obj
,您将永远不会有两个
.obj
文件需要链接。

© www.soinside.com 2019 - 2024. All rights reserved.