PDA

View Full Version : CMake, MinGw and failng linking



T4ng10r
5th December 2015, 15:06
Hi,
I've downloaded and installed Qt5.5 precompiled with MinGw 4.92.
After that I tried to compile my old projects (created with Qt for VisualStudio).
This binary compiles - fails during linkage.


|| [ 42%] Built target log4cpp
|| [ 45%] Built target tools_lib
|| [ 46%] Automatic moc for target PhoneticNumberSystem
|| [ 46%] Built target PhoneticNumberSystem_automoc
|| [ 47%] Linking CXX executable PhoneticNumberSystem.exe
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CAppSettings.cpp.obj):CAppSettings.cpp:( .text+0xd7c): undefined reference to `_imp___ZN7QObjectC2EPS_'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CAppSettings.cpp.obj):CAppSettings.cpp:( .text+0xe72): undefined reference to `_imp___ZN7QObjectD2Ev'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CAppSettings.cpp.obj):CAppSettings.cpp:( .text+0xebc): undefined reference to `_imp___ZN7QObjectD2Ev'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CDataThread.cpp.obj):CDataThread.cpp:(.t ext+0x1d3): undefined reference to `_imp___ZN4QDirC1ERK7QString'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CDataThread.cpp.obj):CDataThread.cpp:(.t ext+0x1f8): undefined reference to `_imp___ZN4QDirD1Ev'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CDataThread.cpp.obj):CDataThread.cpp:(.t ext+0x35f): undefined reference to `_imp___ZN4QDirD1Ev'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CDataThread.cpp.obj):CDataThread.cpp:(.t ext+0x500): undefined reference to `_imp___ZN4QDir9separatorEv'
|| CMakeFiles\PhoneticNumberSystem.dir/objects.a(CDataThread.cpp.obj):CDataThread.cpp:(.t ext+0x7a6): undefined reference to `_imp___ZN4QDir9separatorEv'

Here what CMakeLists.txt for main binary looks like http://pastebin.com/Bk5Jq0ZR
g++ (GCC) 4.8.1
In system environment I added variable QT_DIR=d:\Qt\Qt5.5.1\5.5\mingw492_32
and added it to PATH like => %QT_DIR%;%QT_DIR%\bin;%QT_DIR%\include;%QT_DIR%\li b

Obviously, linker can't find proper objects in proposed libraries. Now, should I rebuild entire Qt to fit G++ 4.8? Should I install more recent MinGw version with newer g++? Or some other CMake settings changes are needed?

Qiieha
5th December 2015, 15:22
Try to change environment var-name QT_DIR to QTDIR.

T4ng10r
5th December 2015, 16:11
Didn't help.
CMake finds Qt, as compilation is success. But it fails in linking with precompiled libraries.

d_stranz
5th December 2015, 19:20
It looks to me as though you might be missing a #define QT_DLL as part of your compilation and linking options. Look at your old VS project file and I think you'll find that. So it will need to be set for CMake as well via a compiler and linker -D flag most likely.

T4ng10r
5th December 2015, 23:36
When I changed QT_DIR variable (and in result PATH) I didn't delete CMake build rules/cache. It didn't matter how many times I run cmake or make or make clean - inside Makefiles path to Qt libraries were leading to previously set MSVC folder.
I've deleted build folder, generated it once again and this time binaries compiled and linked without a problem.
Thank you all - case closed.

d_stranz
6th December 2015, 00:01
That is one of those CMake gotchas that you really have to watch out for. It burns me every time I'm starting a new CMake project and am still playing around with settings.