Unsolved cmake: link to DEBUG imported targets
-
Hi,
I am using Qt on linux as provided by qt.io (opensource) and want to link to
libQt5Core.so.5.14.1.debug
I see that both the release and debug version exist:
- using ls
ls -lh Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1* -rwxr-xr-x 1 me me 6,7M Jan 23 10:42 Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1 -rw-r--r-- 1 me me 74M Jan 24 08:11 Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug
- using file
file Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1* Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=23f01ce7437f4b9ff92313b47665f63ad4606f6c, for GNU/Linux 2.6.28, not stripped Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter *empty*, BuildID[sha1]=23f01ce7437f4b9ff92313b47665f63ad4606f6c, for GNU/Linux 2.6.28, with debug_info, not stripped
The normal cmake build, pulls in
Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1
I do not want that.
I want the power of choice, and I want to be able to choose
Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug
Unfortunately the code seems to show that this is not possible:
grep -n '_populate_Core_target_properties(' Qt/5.14.1/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake
returns that
Qt/5.14.1/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake
only has the following (line 179)_populate_Core_target_properties(RELEASE "libQt5Core.so.5.14.1" "" FALSE)
This shows that only the release version
Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1
is used.Hacking and modifying the above line to the following change:
_populate_Core_target_properties(DEBUG "libQt5Core.so.5.14.1.debug" "" FALSE)
does not work, since then compiling gives:
/usr/bin/ld: /home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: undefined reference to `ucal_clone_56' /usr/bin/ld: /home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: undefined reference to `ucnv_close_56' ## ... more undefined references /usr/bin/ld: ../exes/Debug/go: no symbol version section for versioned symbol `qt_version_tag@@Qt_5.14' /usr/bin/ld: final link failed: nonrepresentable section on output collect2: error: ld returned 1 exit status
Checking the documentation is unfortunately disappointing on this:
https://doc.qt.io/qt-5/cmake-get-started.html#imported-targetsThe documentation mentions
MAP_IMPORTED_CONFIG_COVERAGE
, but greppinggrep -r MAP_IMPORTED_CONFIG_COVERAGE Qt/5.14.1/gcc_64/lib/cmake
shows that this is used nowhere, so the documentation seems to be broken regarding this. Documentation says:
If your project has custom CMake build configurations, you have to map your custom configuration to either the debug or the release Qt configuration. find_package(Qt5 COMPONENTS Core REQUIRED) set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage") # set up a mapping so that the Release configuration for the Qt imported target is # used in the COVERAGE CMake configuration. set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")
(Should I open a bug-repor on this via https://bugreports.qt.io/ ?)
So any tips or hints appreciated.
How can I link to the debug versions of the qt libs?
Thanks -
By the way:
ldd ~/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1*
shows/home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1: linux-vdso.so.1 (0x00007fff63ffe000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9095f8c000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9095d6e000) libicui18n.so.56 => /home/me/Qt/5.14.1/gcc_64/lib/libicui18n.so.56 (0x00007f90958d5000) libicuuc.so.56 => /home/me/Qt/5.14.1/gcc_64/lib/libicuuc.so.56 (0x00007f909551d000) libicudata.so.56 => /home/me/Qt/5.14.1/gcc_64/lib/libicudata.so.56 (0x00007f9093b3a000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9093b35000) libgthread-2.0.so.0 => /lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f9093b2e000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f9093a0f000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f909388b000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9093708000) #... etc /home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: not a dynamic executable
which is weird,
sincefile ~/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug
shows/home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter *empty*, BuildID[sha1]=23f01ce7437f4b9ff92313b47665f63ad4606f6c, for GNU/Linux 2.6.28, with debug_info, not stripped
and
objdump -f ~/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1*
shows/home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1: file format elf64-x86-64 architecture: i386:x86-64, flags 0x00000150: HAS_SYMS, DYNAMIC, D_PAGED start address 0x00000000000a5780 /home/me/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug: file format elf64-x86-64 architecture: i386:x86-64, flags 0x00000150: HAS_SYMS, DYNAMIC, D_PAGED start address 0x00000000000a5780
-
I now think that
Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug
are only debugging symbols. (ref)I have not installed the sources with the online installer.
I think that if I do install the sources, I will probably be able to debug into the qt library code.
Can someone confirm this?
Thanks. -
@AlNe said in cmake: link to DEBUG imported targets:
I now think that
Qt/5.14.1/gcc_64/lib/libQt5Core.so.5.14.1.debug
are only debugging symbols. (ref)I have not installed the sources with the online installer.
I think that if I do install the sources, I will probably be able to debug into the qt library code.
Can someone confirm this?
Thanks.Nope, simply using the maintenance tool to get the sources, is not enough. I still get assembly stuff if I debug into library code such as QTimer.
-
Nope, simply using the maintenance tool to get the sources, is not enough. I still get assembly stuff if I debug into library code such as QTimer.
Ok, I can now see the sources, by doing this:
Tools->Options->Debugger->General->Add Qt Sources...
and selecting
/home/me/Qt/5.14.1/Src
which results in:
Source path: /home/qt/work/qt Target path: /home/me/Qt/5.14.1/Src