Search code examples
windowsassemblygccnasmmingw32

File format not recognized when trying build an exe from obj in windows


I was trying to build an exe from asm file. The asm file looks like this:

global main
extern puts

section .data

msg:
    db "Hello, world!",10,0

section .text

main:
    sub     rsp, 28h
    mov     rcx, msg
    call    puts
    add     rsp, 28h
    ret

Then I assembled it using NASM and tried to link it using GCC. But it is showing this error.

> nasm -fwin64 asmtest.asm
> gcc asmtest.obj
asmtest.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status

I am unable to figure out what is going on. My NASM version 2.14.02 and GCC version 8.1.0. I have followed this tutorial (at the bottom). I am doing this on my Windows 10 64-bit machine.

I have also seen this question, but it didn't help me.


Solution

  • You have installed mingw for 32 bit binaries. You need to install a version of mingw configured to make 64 bit binaries to compile and/or link 64 bit binaries.