Search code examples
g++cross-compilingmingw-w64

Mingw-w64-g++ cross compilation error incompatible libraries


I am trying to cross compile using x86_64-w64-mingw32-g++ with the -m32 option for 32bit windows. I am using the standard library only, nothing extra.

I am getting this output::

x86_64-w64-mingw32-g++ -m32 *.cpp -o ../build/rook-win-x86.exe -O3 -Wall 
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++.dll.a when searching for -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++.a when searching for -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++.a when searching for -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++.dll.a when searching for -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++.a when searching for -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lstdc++
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libadvapi32.a when searching for -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -ladvapi32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libshell32.a when searching for -lshell32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lshell32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libuser32.a when searching for -luser32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -luser32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lkernel32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingw32
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s.a when searching for -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc_s
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc.a when searching for -lgcc
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmoldname.a when searching for -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmoldname
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingwex
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/../../../../x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: skipping incompatible /usr/x86_64-w64-mingw32/lib/libmsvcrt.a when searching for -lmsvcrt
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lmsvcrt
collect2: error: ld returned 1 exit status

It seems the libraries are incompatible.

I found this question which was about this issue. But the answer there was to use Microsoft's link.exe and I want to do it on linux only.

I tried installing gcc-multilib and g++-multilib. However that did not resolve it.


Solution

  • The -m32 and -m64 are to tell gcc/g++ which Windows you are targeting, especially when using native MinGW-w64 on Windows.

    On Linux cross platform building usually involved prepending the compiler tools with the platform's triplet.

    So in case of g++ use i686-w64-mingw32-g++ to target Windows 32-bit and x86_64-w64-mingw32-g++ to target Windows 64-bit.