如何在 windows 上使用带有 C++ 的 x64 程序集?

How to use x64 assembly with C++ on windows?

cpp.cpp:

#include <iostream>

extern "C" int returnnum();

int main() { std::cout << returnnum() << "\n"; }

asm.asm:

segment .text
global _returnnum
_returnnum:
    mov rax, 420
    ret

首先,我用nasm -f win64 asm.asm编译汇编文件。

然后,我用g++ cpp.cpp asm.obj编译C++文件。

但这给了我一个错误:

asm.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status

我知道我可以将 rax 更改为 eax 并使用 -f win32 进行编译,它会工作,但我想要一个 64 位应用程序。我有什么办法可以做到这一点吗?

如果这有帮助:

g++ --version: g++ (MinGW.org GCC-6.3.0-1) 6.3.0
nasm --version: NASM 版本 2.15rc12 2020 年 6 月 26 日编译

根据您从评论和 g++ --version 输出中获得的信息,您似乎安装了纯 MinGW (which is purely 32 bit, and works just fine if you only need to build 32 bit executables since Windows supports running 32 bit executables on a 64 bit OS) rather than MinGW-W64,本机支持 64 位 Windows.

如果您想构建真正的 64 位可执行文件,则需要切换。