After build Qt5 use mingw-w64 on Ubuntu 12.04, I can't build qbs (Qt Build Suit) use MinGW-w64.
linking ui.exe
/usr/bin/x86_64-w64-mingw32-g++ -m64 -O2 -Wall -W /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/.obj/ui/bla.o -o /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/ui.exe -L/home/loaden/qpSOFT/Projects/BuildQt5-m64/qtbase/lib -lqtmain -lQtCore5 -lQtGui5
/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
/build/buildd/mingw-w64-2.0.3/build/x86_64-w64-mingw32/all/mingw-w64-crt/../../../../mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain'
collect2: ld returned 1 exit status
This is a symptom from missing main() or WinMain() entry points. The error stems from the user code.
No! same code can build successful use linux gcc or msvc. the WinMain entry function compiled into libqtmain.a.
Are you sure? If that is the case, you will not get this error, please double check your code, libqtmain or whatnot.
Please add -v to your link command and post the output as well.
Here is the verbose log:
loaden@qpsoft:~/qpSOFT/Projects/Qbs/tests/manual/uic$ /usr/bin/x86_64-w64-mingw32-g++ -v -m64 -O2 -Wall -W /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/.obj/ui/bla.o -o /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/ui.exe -L/home/loaden/qpSOFT/Projects/BuildQt5-m64/qtbase/lib -lqtmain -lQtCore5 -lQtGui5
Using built-in specs.
COLLECT_GCC=/usr/bin/x86_64-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/4.6/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --libexecdir='/usr/lib/gcc-mingw-w64' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --enable-version-specific-runtime-libs --enable-threads=win32 --enable-fully-dynamic-string --enable-sjlj-exceptions --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --with-plugin-ld --target=x86_64-w64-mingw32 --with-gxx-include-dir=/usr/include/c++/4.6 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld
Thread model: win32
gcc version 4.6.3 (GCC)
COMPILER_PATH=/usr/lib/gcc/x86_64-w64-mingw32/4.6/:/usr/lib/gcc/x86_64-w64-mingw32/4.6/:/usr/lib/gcc/x86_64-w64-mingw32/:/usr/lib/gcc/x86_64-w64-mingw32/4.6/:/usr/lib/gcc/x86_64-w64-mingw32/
LIBRARY_PATH=/usr/lib/gcc/x86_64-w64-mingw32/4.6/:/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/
COLLECT_GCC_OPTIONS='-v' '-m64' '-O2' '-Wall' '-Wextra' '-o' '/home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/ui.exe' '-L/home/loaden/qpSOFT/Projects/BuildQt5-m64/qtbase/lib' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-w64-mingw32/4.6/collect2 -m i386pep -Bdynamic -o /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/ui.exe /usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/crt2.o /usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/crtbegin.o -L/home/loaden/qpSOFT/Projects/BuildQt5-m64/qtbase/lib -L/usr/lib/gcc/x86_64-w64-mingw32/4.6 -L/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/.obj/ui/bla.o -lqtmain -lQtCore5 -lQtGui5 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt /usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/crtend.o
/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
/build/buildd/mingw-w64-2.0.3/build/x86_64-w64-mingw32/all/mingw-w64-crt/../../../../mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain'
collect2: ld returned 1 exit status
Any comments about the verbose log?
Not really, can you post the nm listing of libqtmain.a?
D:\qpSOFT\Projects\BuildQt5-m64\qtbase\lib>D:\qpSOFT\MinGW\MinGW64\bin\nm.exe libqtmain.a
0000000000000000 b .bss
0000000000000000 d .data
0000000000000000 p .pdata
0000000000000000 p .pdata$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 t .text
0000000000000000 t .text$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 r .xdata
0000000000000000 r .xdata$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
U __imp__ZN10QArrayData10deallocateEPS_yy
U __imp__ZN10QArrayData11shared_nullE
U __imp__ZN10QArrayData8allocateEyyy6QFlagsINS_16AllocationOptionEE
U __imp__ZN10QByteArray11reallocDataEj6QFlagsIN10QArrayData16AllocationOptionEE
U __imp__ZN7QString9fromUtf16EPKti
U __imp__ZNK7QString11toLocal8BitEv
U __imp_GetCommandLineW
U _Z5qMainiPPc
U _Z8qWinMainP11HINSTANCE__S0_PciRiR7QVectorIS1_E
0000000000000000 T _ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 t _ZN7QVectorIPcE16defaultConstructEPS0_S2_.isra.3
U memcpy
U memset
0000000000000020 T WinMain
Same issue under Windows 7 64bit, use x86_64-w64-mingw32-gcc-4.6.3-release-win64_rubenvb.7z
On Linux (Ubuntu 12.04)
loaden@qpsoft:~/qpSOFT/Projects/BuildQt5-m64/qtbase/lib$ x86_64-w64-mingw32-nm ./libqtmain.a
qtmain_win.o:
0000000000000000 b .bss
0000000000000000 d .data
0000000000000000 p .pdata
0000000000000000 p .pdata$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 t .text
0000000000000000 t .text$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 r .xdata
0000000000000000 r .xdata$_ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000020 T WinMain
U _Z5qMainiPPc
U _Z8qWinMainP11HINSTANCE__S0_PciRiR7QVectorIS1_E
0000000000000000 T _ZN7QVectorIPcE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE
0000000000000000 t _ZN7QVectorIPcE16defaultConstructEPS0_S2_.isra.3
U __imp_GetCommandLineW
U __imp__ZN10QArrayData10deallocateEPS_yy
U __imp__ZN10QArrayData11shared_nullE
U __imp__ZN10QArrayData8allocateEyyy6QFlagsINS_16AllocationOptionEE
U __imp__ZN10QByteArray11reallocDataEj6QFlagsIN10QArrayData16AllocationOptionEE
U __imp__ZN7QString9fromUtf16EPKti
U __imp__ZNK7QString11toLocal8BitEv
U memcpy
U memset
No idea, WinMain is there, try adding -mwindows.
-mwindows can't solve this issue.
loaden@qpsoft:~/qpSOFT/Projects/Qbs/tests/manual/uic$ /usr/bin/x86_64-w64-mingw32-g++ -m64 -O2 -mwindows -Wall -W /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/.obj/ui/bla.o -o /home/loaden/qpSOFT/Projects/Qbs/tests/manual/uic/build/m64-mingw64-release/ui.exe -L/home/loaden/qpSOFT/Projects/BuildQt5-m64/qtbase/lib -lqtmain -lQtCore5 -lQtGui5
/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
/build/buildd/mingw-w64-2.0.3/build/x86_64-w64-mingw32/all/mingw-w64-crt/../../../../mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain'
Sorry, no idea, I just tried on my end with a simple test case, I can't reproduce the issue.
It would seem to be a linker issue though, nothing mingw-w64 specific.
Btw, -mwindows is mandatory if you use WinMain.
Well, this is a Qt issue. Your app lacks a main and WinMain function. So an executable can't be linked.
I admit that the linker-message about missing WinMain looks on the first hand a bit irretating, But we have to support ventures using for -mwindows GUI subsystem the function main as entry-point instead of proper WinMain one, so we have a forwarding main() to WinMain() imlementation in startup-code.
So I close this bug as not a bug. please use instead mailing-list to get help about your issue.
I have same issue with -m64 with a program. it uses no windows stuff. it's a console mode application. -console does nothing useful, -windows does nothing useful, stil get same error. this is with 4.9.0 x86_64 sjlj win32 experimental personal 2014 timestamped file.
it actually executes. links just fine with -m32.
used to be -m32 didn't work right, now it's -m64. but at least I get a running executable, but the ld error throws me off and I think there's a problem. static linking made no difference.
f:/x86_64-4.9.0-snapshot-20140219-rev207854-win32-sjlj-rt_v4/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.0/../../../../x86_64-w64-mingw32/lib/../lib\libmingw3
2.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x25): undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status
as it is, I don't use -windows or -console.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 3d656286c2fbf9376b6c665d39c3c502
COLLECT_GCC_OPTIONS='-m64' '-Wall' '-Wextra' '-v' '-save-temps' '-Ofast' '-static-libgcc' '-static' '-std=c++11' '-s' '-isystem' '/libpq/' '-isystem' '/libpq/se
rver/libpq/' '-isystem' '/prj/fltk/fltk-2.0.x-alpha-r9042/' '-isystem' '/prj/fltk/fltk-2.0.x-alpha-r9042/lib/' '-isystem' '/prj/zlib-1.2.5/' '-isystem' '/prj/bo
ost/boost64' '-o' '64\md5.exe' '-mtune=core2' '-march=nocona'
f:/x86_64-4.9.0-snapshot-20140219-rev207854-win32-sjlj-rt_v4/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.0/../../../../x86_64-w64-mingw32/bin/as.exe -v --64
I have the same issue. Compiler spits out same error, have a lool at command and output:
C:\..\..\..\..\mame>make -lmingw32 SUBTARGET=trs80_ SOURCES=src/mame/drivers/trs80.cpp REGENIE=1 MINGW64=c:\MinGW
GCC 5.1.0 detected
Building configurations...
Running action 'gmake'...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/Makefile...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/qtdbg_windows.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/osd_windows.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/ocore_windows.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/utils.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/formats.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/expat.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/zlib.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/softfloat.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/jpeg.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/flac.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/7z.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/lua.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/lualibs.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/sqlite3.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/portmidi.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/bx.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/bgfx.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/portaudio.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/linenoise.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/utf8proc.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/emu.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/precompile.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/frontend.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/optional.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/dasm.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/mame_trs80_.make...
Generating ../build/projects/windows/mametrs80_/gmake-mingw64-gcc/trs80_.make...
Done. Generated 28/28 projects.
Precompiling src/emu/emu.h...
c:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
C:/crossdev/src/mingw-w64-v4-git/mingw-w64-crt/crt/crt0_c.c:18: undefined reference to 'WinMain'
collect2.exe: error: ld returned 1 exit status
precompile.make:298: recipe for target '../../../../mingw-gcc/obj/x64/Release/emu.h.gch' failed
make[2]: [../../../../mingw-gcc/obj/x64/Release/emu.h.gch] Error 1
makefile:79: recipe for target 'precompile' failed
make[1]: [precompile] Error 2
makefile:994: recipe for target 'windows_x64' failed
make: *** [windows_x64] Error 2
So this is not caused by a programming error or a Qt issue as user @Kai Tietz implies. Needs addressing.
Someone who built a SDL library has found a way to address the same issue in their build flags, suggest having a look and perhaps adapting this to your code:
https://github.com/libSDL2pp/libSDL2pp/issues/66
Last edit: Werner Moecke 2017-11-08