KDAB / KDDockWidgets

KDAB's Dock Widget Framework for Qt
https://www.kdab.com/development-resources/qt-tools/kddockwidgets
Other
762 stars 164 forks source link

Linking problems #497

Closed Mai65 closed 5 months ago

Mai65 commented 5 months ago

Hi, I am currently trying to compile the project by using the following commands:

cmake -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_INSTALL_PREFIX=/usr \
          -DKDDockWidgets_FRONTENDS='qtwidgets;qtquick' \
          -DKDDockWidgets_QT6=true \
          .
    cmake --build .

which results in the following error:

[ 58%] Automatic RCC for ../../dockwidgets/resources_example.qrc
[ 59%] Building CXX object examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/qtquick_dockwidgets_autogen/mocs_compilation.cpp.o
[ 59%] Building CXX object examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/main.cpp.o
[ 60%] Building CXX object examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/qtquick_dockwidgets_autogen/EWIEGA46WW/qrc_resources_qtquick_example.cpp.o
[ 60%] Building CXX object examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/qtquick_dockwidgets_autogen/PBMXWPTGLO/qrc_resources_example.cpp.o
[ 61%] Linking CXX executable ../../../bin/qtquick_dockwidgets
/usr/bin/ld: /usr/lib/libproxy/libpxbackend-1.0.so: undefined reference to `curl_easy_setopt@CURL_OPENSSL_4'
/usr/bin/ld: /usr/lib/libproxy/libpxbackend-1.0.so: undefined reference to `curl_easy_cleanup@CURL_OPENSSL_4'
/usr/bin/ld: /usr/lib/libproxy/libpxbackend-1.0.so: undefined reference to `curl_easy_perform@CURL_OPENSSL_4'
/usr/bin/ld: /usr/lib/libproxy/libpxbackend-1.0.so: undefined reference to `curl_easy_init@CURL_OPENSSL_4'
/usr/bin/ld: /usr/lib/libproxy/libpxbackend-1.0.so: undefined reference to `curl_easy_strerror@CURL_OPENSSL_4'
collect2: error: ld returned 1 exit status
make[2]: *** [examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/build.make:190: bin/qtquick_dockwidgets] Error 1
make[1]: *** [CMakeFiles/Makefile2:450: examples/qtquick/dockwidgets/CMakeFiles/qtquick_dockwidgets.dir/all] Error 2

I checked if curl is installed: it is. This is the output of ls /usr/lib | grep curl:

libcurl-gnutls.so
libcurl-gnutls.so.3
libcurl-gnutls.so.4
libcurl-gnutls.so.4.0.0
libcurl-gnutls.so.4.1.0
libcurl-gnutls.so.4.2.0
libcurl-gnutls.so.4.3.0
libcurl-gnutls.so.4.4.0
libcurl-gnutls.so.4.5.0
libcurl-gnutls.so.4.6.0
libcurl-gnutls.so.4.7.0
libcurl-gnutls.so.4.8.0
libcurl.so
libcurl.so.4
libcurl.so.4.8.0

Hope someone can help me.

Best, Mai65

iamsergio commented 5 months ago

Hi,

Can you clone: https://github.com/iamsergio/test-minimal-qtquick.git

and see if it gives the same linker error ?

Mai65 commented 5 months ago

Hi thanks for providing the minimal example. I took the following steps:

git clone https://github.com/iamsergio/test-minimal-qtquick.git
cd test-minimal-qtquick/
cmake . 

this resulted in the following output of cmake:

-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Found OpenGL: /usr/lib/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found XKB: /usr/lib/libxkbcommon.so (found suitable version "1.7.0", minimum required is "0.5.0")
-- Found WrapVulkanHeaders: /usr/include
-- Configuring done (2.8s)
-- Generating done (0.0s)
-- Build files have been written to: /home/mai65/test-minimal-qtquick

This looks like a successful build to me. However, if you have a different opinion, please let me know.

Thanks for your help so far.

Mai65

iamsergio commented 5 months ago

And cmake --build . worked as well ?

Mai65 commented 5 months ago

Sorry forgot to add that...

[  0%] Built target minimal_autogen_timestamp_deps
[ 20%] Automatic MOC for target minimal
[ 20%] Built target minimal_autogen
[ 40%] Building CXX object CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o
[ 60%] Building CXX object CMakeFiles/minimal.dir/main.cpp.o
[ 80%] Linking CXX executable minimal
[100%] Built target minimal

Looks fine for me as well.

iamsergio commented 5 months ago

Paste a verbose build of kddw, something like: VERBOSE=1 cmake --build

Mai65 commented 5 months ago

output of cmake --build . --verbose

Change Dir: '/home/mai65/test-minimal-qtquick'

Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile
/usr/bin/cmake -S/home/mai65/test-minimal-qtquick -B/home/mai65/test-minimal-qtquick --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/mai65/test-minimal-qtquick/CMakeFiles /home/mai65/test-minimal-qtquick//CMakeFiles/progress.marks
/usr/bin/make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/mai65/test-minimal-qtquick'
/usr/bin/make  -f CMakeFiles/minimal_autogen_timestamp_deps.dir/build.make CMakeFiles/minimal_autogen_timestamp_deps.dir/depend
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
cd /home/mai65/test-minimal-qtquick && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick/CMakeFiles/minimal_autogen_timestamp_deps.dir/DependInfo.cmake "--color="
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
/usr/bin/make  -f CMakeFiles/minimal_autogen_timestamp_deps.dir/build.make CMakeFiles/minimal_autogen_timestamp_deps.dir/build
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
make[2]: Nothing to be done for 'CMakeFiles/minimal_autogen_timestamp_deps.dir/build'.
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
[  0%] Built target minimal_autogen_timestamp_deps
/usr/bin/make  -f CMakeFiles/minimal_autogen.dir/build.make CMakeFiles/minimal_autogen.dir/depend
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
cd /home/mai65/test-minimal-qtquick && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick/CMakeFiles/minimal_autogen.dir/DependInfo.cmake "--color="
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
/usr/bin/make  -f CMakeFiles/minimal_autogen.dir/build.make CMakeFiles/minimal_autogen.dir/build
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
[ 20%] Automatic MOC for target minimal
/usr/bin/cmake -E cmake_autogen /home/mai65/test-minimal-qtquick/CMakeFiles/minimal_autogen.dir/AutogenInfo.json ""
AutoGen: Refreshing parse cache because it doesn't exist.
AutoMoc: Generating "SRC:/minimal_autogen/moc_predefs.h", because it doesn't exist.
/usr/bin/c++ -std=gnu++17 -dM -E -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_QMLBUILTINS_LIB -DQT_QMLINTEGRATION_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICK_LIB -I/usr/include/qt6/QtQuick -I/usr/include/qt6 -I/usr/include/qt6/QtCore -I/usr/lib/qt6/mkspecs/linux-g++ -I/usr/include/qt6/QtGui -I/usr/include/qt6/QtQml -I/usr/include/qt6/QtQmlIntegration -I/usr/include/qt6/QtQmlBuiltins -I/usr/include/qt6/QtNetwork -I/usr/include/qt6/QtQmlModels -I/usr/include/qt6/QtOpenGL -I/usr/include -I/usr/include/c++/13.2.1 -I/usr/include/c++/13.2.1/x86_64-pc-linux-gnu -I/usr/include/c++/13.2.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed
AutoGen: Parsing "SRC:/main.cpp"
AutoMoc: Generating MOC compilation "SRC:/minimal_autogen/mocs_compilation.cpp"
AutoMoc: Merging MOC dependencies into "SRC:/minimal_autogen/deps"
AutoGen: Writing the parse cache file "SRC:/CMakeFiles/minimal_autogen.dir/ParseCache.txt"
AutoGen: Writing the settings file "SRC:/CMakeFiles/minimal_autogen.dir/AutogenUsed.txt"
/usr/bin/cmake -E touch /home/mai65/test-minimal-qtquick/minimal_autogen/timestamp
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
[ 20%] Built target minimal_autogen
/usr/bin/make  -f CMakeFiles/minimal.dir/build.make CMakeFiles/minimal.dir/depend
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
cd /home/mai65/test-minimal-qtquick && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick /home/mai65/test-minimal-qtquick/CMakeFiles/minimal.dir/DependInfo.cmake "--color="
Dependencies file "minimal_autogen/deps" is newer than depends file "/home/mai65/test-minimal-qtquick/CMakeFiles/minimal.dir/compiler_depend.internal".
Consolidate compiler generated dependencies of target minimal
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
/usr/bin/make  -f CMakeFiles/minimal.dir/build.make CMakeFiles/minimal.dir/build
make[2]: Entering directory '/home/mai65/test-minimal-qtquick'
[ 40%] Building CXX object CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o
/usr/bin/c++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_QMLBUILTINS_LIB -DQT_QMLINTEGRATION_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICK_LIB -I/home/mai65/test-minimal-qtquick/minimal_autogen/include -isystem /usr/include/qt6/QtQuick -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtQml -isystem /usr/include/qt6/QtQmlIntegration -isystem /usr/include/qt6/QtQmlBuiltins -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtQmlModels -isystem /usr/include/qt6/QtOpenGL -std=gnu++17 -mno-direct-extern-access -MD -MT CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o -MF CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o.d -o CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o -c /home/mai65/test-minimal-qtquick/minimal_autogen/mocs_compilation.cpp
[ 60%] Building CXX object CMakeFiles/minimal.dir/main.cpp.o
/usr/bin/c++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_QMLBUILTINS_LIB -DQT_QMLINTEGRATION_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICK_LIB -I/home/mai65/test-minimal-qtquick/minimal_autogen/include -isystem /usr/include/qt6/QtQuick -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtQml -isystem /usr/include/qt6/QtQmlIntegration -isystem /usr/include/qt6/QtQmlBuiltins -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtQmlModels -isystem /usr/include/qt6/QtOpenGL -std=gnu++17 -mno-direct-extern-access -MD -MT CMakeFiles/minimal.dir/main.cpp.o -MF CMakeFiles/minimal.dir/main.cpp.o.d -o CMakeFiles/minimal.dir/main.cpp.o -c /home/mai65/test-minimal-qtquick/main.cpp
[ 80%] Linking CXX executable minimal
/usr/bin/cmake -E cmake_link_script CMakeFiles/minimal.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/minimal.dir/minimal_autogen/mocs_compilation.cpp.o CMakeFiles/minimal.dir/main.cpp.o -o minimal  /usr/lib/libQt6Quick.so.6.7.0 /usr/lib/libQt6QmlModels.so.6.7.0 /usr/lib/libQt6Qml.so.6.7.0 /usr/lib/libQt6QmlBuiltins.a /usr/lib/libQt6Network.so.6.7.0 /usr/lib/libQt6OpenGL.so.6.7.0 /usr/lib/libQt6Gui.so.6.7.0 /usr/lib/libGLX.so /usr/lib/libOpenGL.so /usr/lib/libQt6Core.so.6.7.0
make[2]: Leaving directory '/home/mai65/test-minimal-qtquick'
[100%] Built target minimal
make[1]: Leaving directory '/home/mai65/test-minimal-qtquick'
/usr/bin/cmake -E cmake_progress_start /home/mai65/test-minimal-qtquick/CMakeFiles 0
iamsergio commented 5 months ago

Sorry, I meant in KDDockWidgets

Mai65 commented 5 months ago

Oh sorry. Here it is: output.log

iamsergio commented 5 months ago

there's no error in that output, seems truncated ?

Mai65 commented 5 months ago

My fault... forgot to redirect the error stream...

output.log

iamsergio commented 5 months ago

ok good. Can you now go back to the mini-qtquick example, do a git pull and see if that one still builds ?

Mai65 commented 5 months ago

There is no new commit in https://github.com/iamsergio/test-minimal-qtquick.git

iamsergio commented 5 months ago

oops, forgot to push, try now :)

Mai65 commented 5 months ago

Seems like there is no problem. Here is the verbose log output.log

iamsergio commented 5 months ago

ok, just one more. Pull again from test-minimal

Mai65 commented 5 months ago

Still seems fine output.log

iamsergio commented 5 months ago

No idea then, that output looks OK. I still doubt it's a KDDW bug though, as we don't use libpxbackend or curl or libproxy

Mai65 commented 5 months ago

I did a system cleanup (pacman -Qtdq | sudo pacman -Rns -). This removed the following packages:

ayatana-ido              0.10.2-1           -0,28 MiB
colord                   1.4.7-2            -5,06 MiB
colord-gtk-common        0.3.0-2            -0,12 MiB
electron30               30.0.1-2         -229,01 MiB
graphicsmagick           1.3.43-1          -13,97 MiB
kparts5                  5.115.0-1          -2,05 MiB
lapack                   3.12.0-5           -7,48 MiB
libayatana-indicator     0.9.4-1            -0,11 MiB
opencv                   4.9.0-4           -95,99 MiB
python-annotated-types   0.6.0-3            -0,10 MiB
python-pydantic-core     1:2.18.2-2         -5,33 MiB
verdict                  1.4.2-1            -0,23 MiB
colord-gtk               0.3.0-2            -0,05 MiB
dotnet-runtime-7.0       7.0.18.sdk118-1   -66,65 MiB
electron                 1:30-1              0,00 MiB
extra-cmake-modules      6.1.0-1            -1,77 MiB
gmic                     3.3.5-1           -18,67 MiB
kgraphviewer             2.4.3-5            -3,13 MiB
lensfun                  1:0.3.4-4          -4,29 MiB
lib32-libunwind          1.8.1-1            -0,19 MiB
lib32-libxdamage         1.1.6-1            -0,01 MiB
libayatana-appindicator  0.5.93-1           -0,32 MiB
nlohmann-json            3.11.2-2           -0,98 MiB
osm-gps-map              1.2.0-1            -0,62 MiB
pugixml                  1.14-1             -0,30 MiB
python-pydantic          2.7.1-2            -4,68 MiB
sequoia-sqv              1.1.0-1            -2,33 MiB
spdlog                   1.13.0-1           -0,66 MiB

since then yay -S hotspot works for me on my native system. I can not say what the actual cause was though.

Another example of an undefined incompatebilety can be found here. A workaround can be found here