Search code examples
linuxcross-compilingmingw-w64

can't find linker script when cross compiling for win32 from linux


Cannot compile simple hello.c for win32, please help. Compiling for windows 64-bit works just fine.

Wrong options? Is -m32 supposed to be enough? I tried some march too. Should I try using ldconfig or change sysroot for ld? Specifying -T i386pe.x for ld did not work either. I think I have all packages installed. Just why ld won't find the script? Or there is something else i'm missing?

$ x86_64-w64-mingw32-gcc hello.c -m32
/usr/bin/x86_64-w64-mingw32-ld: cannot open linker script file ldscripts/i386pe.x: No such file or directory
collect2: error: ld returned 1 exit status
$ locate i386pe.x|ag x$
/snap/gnome-3-38-2004/143/usr/lib/x86_64-linux-gnu/ldscripts/i386pe.x
/snap/gnome-42-2204/120/usr/lib/x86_64-linux-gnu/ldscripts/i386pe.x
/snap/gnome-42-2204/141/usr/lib/x86_64-linux-gnu/ldscripts/i386pe.x
/usr/lib/x86_64-linux-gnu/ldscripts/i386pe.x
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy
$ sudo apt list --installed | grep mingw

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

binutils-mingw-w64-i686/jammy,now 2.38-3ubuntu1+9build1 amd64 [installed]
binutils-mingw-w64-x86-64/jammy,now 2.38-3ubuntu1+9build1 amd64 [installed,automatic]
g++-mingw-w64-i686-posix/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
g++-mingw-w64-i686-win32/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
g++-mingw-w64-i686/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed,automatic]
g++-mingw-w64-x86-64-posix/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
g++-mingw-w64-x86-64-win32/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
g++-mingw-w64-x86-64/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed,automatic]
g++-mingw-w64/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed,automatic]
gcc-mingw-w64-base/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-i686-posix-runtime/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-i686-posix/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-i686-win32-runtime/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-i686-win32/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed]
gcc-mingw-w64-i686/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed]
gcc-mingw-w64-x86-64-posix-runtime/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-x86-64-posix/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-x86-64-win32-runtime/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-x86-64-win32/jammy,now 10.3.0-14ubuntu1+24.3 amd64 [installed,automatic]
gcc-mingw-w64-x86-64/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed,automatic]
gcc-mingw-w64/jammy,jammy,now 10.3.0-14ubuntu1+24.3 all [installed,automatic]
libz-mingw-w64/jammy,jammy,now 1.2.11+dfsg-4 all [installed,auto-removable]
mingw-w64-common/jammy,jammy,now 8.0.0-1 all [installed,automatic]
mingw-w64-i686-dev/jammy,jammy,now 8.0.0-1 all [installed]
mingw-w64-x86-64-dev/jammy,jammy,now 8.0.0-1 all [installed,automatic]
mingw-w64/jammy,jammy,now 8.0.0-1 all [installed]

Solution

  • Just use i686-w64-mingw32-gcc instead of x86_64-w64-mingw32-gcc.