Yea, it builds fine when I reorder them in my CMakeLists.
My ‘invalid’ CMakeLists part dealing with external libraries looks like this:

# global target link libraries
target_link_libraries(${TARGET_FULL_NAME}
    PRIVATE
        Qt5::Core
        Qt5::Sql
        Qt5::Network
                Qt5::Concurrent
                Qt5::WebSockets
                ${BOX2D_LIBRARY}
                ${LZ4_LIBRARY}
)

# on unix-based systems we use static qt build - add some stuff to target link 
libraries
if (LINUX)
target_link_libraries(${TARGET_FULL_NAME}
    PRIVATE
                Qt5::QPSQLDriverPlugin
                Qt5::QSQLiteDriverPlugin
                "libpq.so"
)
endif()

# small hack to properly set LZ4 library between build modes
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
        (${TARGET_FULL_NAME} PRIVATE ${LZ4_LIBRARY_DEBUG})
else ()
        target_link_libraries(${TARGET_FULL_NAME} PRIVATE 
${LZ4_LIBRARY_RELEASE})
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")

I don’t use any more target_link_libraries functions in there so I don’t know 
from where this extra libQt5Network come from.
Do you have any idea why it actually builds this way under Release mode?
>From what I see, order of the libraries are the same between Release and Debug 
>and only Debug generates those errors.

// RELEASE
/usr/local/Qt-5.13.0/lib/libQt5Core.a 
/usr/local/Qt-5.13.0/lib/libQt5Sql.a 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Concurrent.a 
/usr/local/Qt-5.13.0/lib/libQt5WebSockets.a
/home/izowiuz/vcpkg/installed/x64-linux/lib/libBox2D.a 
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a 
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a
-lpq
/home/izowiuz/vcpkg/installed/x64-linux/lib/liblz4.a 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Core.a -lpthread 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Core.a -lm 
/usr/local/Qt-5.13.0/lib/libqtpcre2.a -ldl -lssl -lcrypto 

// DEBUG
/usr/local/Qt-5.13.0/lib/libQt5Core.a 
/usr/local/Qt-5.13.0/lib/libQt5Sql.a 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Concurrent.a 
/usr/local/Qt-5.13.0/lib/libQt5WebSockets.a
/home/izowiuz/vcpkg/installed/x64-linux/debug/lib/libBox2D.a 
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a 
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a
-lpq
/home/izowiuz/vcpkg/installed/x64-linux/debug/lib/liblz4d.a 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Core.a -lpthread 
/usr/local/Qt-5.13.0/lib/libQt5Network.a 
/usr/local/Qt-5.13.0/lib/libQt5Core.a -lm 
/usr/local/Qt-5.13.0/lib/libqtpcre2.a -ldl -lssl -lcrypto

Narolewski Jakub

From: Thiago Macieira
Sent: 25 August 2019 17:46
To: interest@qt-project.org
Subject: Re: [Interest] Static build of Qt - debug mode and plugins

On Sunday, 25 August 2019 00:25:50 PDT Jakub Narolewski wrote:
> /usr/local/Qt-5.13.0/lib/libQt5Core.a
> /usr/local/Qt-5.13.0/lib/libQt5Sql.a
> /usr/local/Qt-5.13.0/lib/libQt5Network.a
> /usr/local/Qt-5.13.0/lib/libQt5Concurrent.a
> /usr/local/Qt-5.13.0/lib/libQt5WebSockets.a
> /home/izowiuz/vcpkg/installed/x64-linux/lib/libBox2D.a
> /usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a
> /usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a
> -lpq
> /home/izowiuz/vcpkg/installed/x64-linux/lib/liblz4.a
> /usr/local/Qt-5.13.0/lib/libQt5Network.a
> /usr/local/Qt-5.13.0/lib/libQt5Core.a -lpthread
> /usr/local/Qt-5.13.0/lib/libQt5Network.a
> /usr/local/Qt-5.13.0/lib/libQt5Core.a -lm
> /usr/local/Qt-5.13.0/lib/libqtpcre2.a -ldl -lssl -lcrypto

The order is wrong, as you can see. libQt5Sql.a appears before the plugins.

Invert the order and make the plugins appear before the library in this link 
line.

It's interesting that the order is mostly correct. It seems that CMake is 
applying dependency sorting correctly. If that is the case, then either it's a 
CMake bug or there's some information missing in the qmake-generated CMake 
files. Reporting a bug here is unlikely to get you enough attention, so you 
may want to get your hands dirty and debug yourself.

It's also interesting that QtCore and QtNetwork are listed three times.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products



_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to