[Interest] Static build of Qt - debug mode and plugins

Jakub Narolewski izowiuz at gmail.com
Sat Aug 24 19:53:45 CEST 2019


Hello :]

I'm having a bit of a problem compiling my application in debug build mode under Linux.
Generally, under *nixes, I'm using self build, static Qt version. To configure Qt I'm using this simple one-liner:

// CONFIGURE START

./configure \
-opensource \
-confirm-license \
-static \
-debug \
-openssl-linked \
-qt-zlib \
-qt-pcre \
-no-gui \
-no-dbus \
-no-accessibility \
-no-opengl \
-no-pkg-config \
-no-libjpeg \
-no-libpng \
-no-harfbuzz \
-no-freetype \
-no-xcb \
-no-xkbcommon \
-no-feature-xml \
-no-feature-testlib \
-no-feature-gif \
-no-feature-ico \
-no-feature-texthtmlparser \
-no-feature-textodfwriter \
-no-feature-effects \
-no-feature-im \
-no-feature-dom \
-no-feature-filesystemmodel \
-no-feature-graphicsview \
-no-feature-graphicseffect \
-no-feature-sizegrip \
-no-feature-calendarwidget \
-no-feature-printpreviewwidget \
-no-feature-keysequenceedit \
-no-feature-colordialog \
-no-feature-filedialog \
-no-feature-fontdialog \
-no-feature-printpreviewdialog \
-no-feature-progressdialog \
-no-feature-inputdialog \
-no-feature-errormessage \
-no-feature-wizard \
-no-feature-datawidgetmapper \
-no-feature-imageformat_bmp \
-no-feature-imageformat_ppm \
-no-feature-imageformat_xbm \
-no-feature-imageformat_png \
-no-feature-imageformat_jpeg \
-no-feature-image_heuristic_mask \
-no-feature-image_text \
-no-feature-colornames \
-no-feature-cups \
-no-feature-paint_debug \
-no-feature-freetype \
-no-feature-translation \
-no-feature-codecs \
-no-feature-big_codecs \
-no-feature-ftp \
-no-feature-bearermanagement \
-no-feature-completer \
-no-feature-fscompleter \
-no-feature-desktopservices \
-no-feature-mimetype \
-no-feature-systemtrayicon \
-no-feature-undocommand \
-no-feature-undostack \
-no-feature-undogroup \
-no-feature-undoview \
-no-feature-statemachine \
-nomake examples \
-nomake tests \
-skip qt3d \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtcharts \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdeclarative \
-skip qtdoc \
-skip qtgamepad \
-skip qtgraphicaleffects \
-skip qtimageformats \
-skip qtlocation \
-skip qtmacextras \
-skip qtmultimedia \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtquickcontrols \
-skip qtquickcontrols2 \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtvirtualkeyboard \
-skip qtwayland \
-skip qtwebchannel \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtremoteobjects \
-skip qtxmlpatterns

// CONFIGURE END

Application compiles and runs fine - but only in Release mode.
As soon as I switch to debug versions of Qt and app I'm getting errors:

// ERRORS START

[  1%] Linking CXX executable mrserver_debug
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a(main.o): In function `QPSQLDriverPlugin::~QPSQLDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/psql/main.cpp:46: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a(main.o): In function `QPSQLDriverPlugin::~QPSQLDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/psql/main.cpp:46: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlpsql.a(main.o): In function `QPSQLDriverPlugin::QPSQLDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/psql/main.cpp:58: undefined reference to `QSqlDriverPlugin::QSqlDriverPlugin(QObject*)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(smain.o): In function `QSQLiteDriverPlugin::~QSQLiteDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/smain.cpp:46: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(smain.o): In function `QSQLiteDriverPlugin::~QSQLiteDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/smain.cpp:46: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(smain.o): In function `QSQLiteDriverPlugin::QSQLiteDriverPlugin()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/smain.cpp:58: undefined reference to `QSqlDriverPlugin::QSqlDriverPlugin(QObject*)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResult::virtual_hook(int, void*)':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:377: undefined reference to `QSqlCachedResult::virtual_hook(int, void*)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult*, QSQLiteDriver const*)':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:179: undefined reference to `QSqlCachedResultPrivate::QSqlCachedResultPrivate(QSqlCachedResult*, QSqlDriver const*)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResultPrivate::cleanup()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:192: undefined reference to `QSqlCachedResult::cleanup()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResultPrivate::initColumns(bool)':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:211: undefined reference to `QSqlCachedResult::init(int)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResult::QSQLiteResult(QSQLiteDriver const*)':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:361: undefined reference to `QSqlCachedResult::QSqlCachedResult(QSqlCachedResultPrivate&)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResult::exec()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:452: undefined reference to `QSqlCachedResult::clearValues()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o): In function `QSQLiteResult::~QSQLiteResult()':
/home/izowiuz/qt/qt-everywhere-src-5.13.0/qtbase/include/QtSql/5.13.0/QtSql/private/../../../../../src/sql/kernel/qsqlcachedresult_p.h:65: undefined reference to `vtable for QSqlCachedResult'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTI13QSQLiteResult[_ZTI13QSQLiteResult]+0x10): undefined reference to `typeinfo for QSqlCachedResult'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0x80): undefined reference to `QSqlCachedResult::data(int)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0x88): undefined reference to `QSqlCachedResult::isNull(int)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0x98): undefined reference to `QSqlCachedResult::fetch(int)'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0xa0): undefined reference to `QSqlCachedResult::fetchNext()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0xa8): undefined reference to `QSqlCachedResult::fetchPrevious()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0xb0): undefined reference to `QSqlCachedResult::fetchFirst()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0xb8): undefined reference to `QSqlCachedResult::fetchLast()'
/usr/local/Qt-5.13.0/plugins/sqldrivers/libqsqlite.a(qsql_sqlite.o):(.data.rel.ro._ZTV13QSQLiteResult[_ZTV13QSQLiteResult]+0xf8): undefined reference to `QSqlCachedResult::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy)'
collect2: error: ld returned 1 exit status
CMakeFiles/mrserver_debug.dir/build.make:824: recipe for target 'mrserver_debug' failed
make[2]: *** [mrserver_debug] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/mrserver_debug.dir/all' failed
make[1]: *** [CMakeFiles/mrserver_debug.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

// ERRORS END

This looks like errors caused by missing Q_IMPORT_PLUGIN stuff on my side.
Which is funky, because on top of my main.cpp file I have:

#if defined(Q_OS_LINUX)
Q_IMPORT_PLUGIN(QPSQLDriverPlugin)
Q_IMPORT_PLUGIN(QSQLiteDriverPlugin)
#endif

And in my CMakeLists:

if (LINUX)
target_link_libraries(${TARGET_FULL_NAME}
    PRIVATE
		Qt5::QPSQLDriverPlugin
		Qt5::QSQLiteDriverPlugin
		"libpq.so"
)
endif()

I have tried removing "#if defined(Q_OS_LINUX)" in .cpp and my "if (LINUX)" check from CMakeLists but errors persists.
I’m currently using Qt 5.13.0

Any help will be appreciated,
Narolewski Jakub
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20190824/da8230ec/attachment.html>


More information about the Interest mailing list