代码之家  ›  专栏  ›  技术社区  ›  avighnac

如何在windows上与C++一起使用x64程序集?

  •  1
  • avighnac  · 技术社区  · 2 年前

    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 .

    但这给了我一个错误:

    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日编译

    1 回复  |  直到 2 年前
        1
  •  4
  •   ShadowRanger    2 年前

    根据您的评论信息和 g++ --version 输出,看起来您安装了普通 MinGW (这纯粹是32位的,如果您只需要构建32位可执行文件,那么它就可以正常工作,因为Windows支持在64位操作系统上运行32位可执行文件),而不是 MinGW-W64 ,该分叉具有对64位Windows的本机支持。

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