2016-07-22 16 views
0

C++ Qt5.6.1アプリケーションを作成してDebianで起動しようとしています。 リンクエラーまたはロードライブラリエラーのいずれかを取得しています。 CMakeので作成 静的にリンクされたQt5のXCBプラグインのロードライブラリまたはリンクエラーの取得

configure -release -confirm-license -opensource -static -no-dbus -no-openssl -no-qml-debug -no-opengl -qt-freetype -qt-xcb -nomake tools -nomake tests -nomake examples -no-sql-db2 -no-sql-oci -no-sql-tds -no-sql-sqlite2 -no-sql-odbc -no-sql-ibase -no-sql-psql -skip doc -skip imageformats -skip webchannel -skip webengine -skip webview -skip sensors -skip serialport -skip script -skip multimedia 

プロジェクトは、LIBSは、このように指定されている

Qtが静的LIBSに構築

、使用される構成:

SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${QT5_LIB_ROOT}/cmake") 

FIND_PACKAGE(Qt5Core REQUIRED) 
FIND_PACKAGE(Qt5Gui REQUIRED) 
FIND_PACKAGE(Qt5Widgets REQUIRED) 
FIND_PACKAGE(Qt5Network REQUIRED) 

FIND_PACKAGE(PNG REQUIRED) 
FIND_PACKAGE(ZLIB REQUIRED) 
FIND_PACKAGE(Threads REQUIRED) 

IF(CMAKE_BUILD_TYPE STREQUAL "Debug") 
    SET(QT_LIBS 
     libqtharfbuzzng_debug.a 
     libqtpcre_debug.a 
     libQt5PlatformSupport_debug.a 
     libxcb-static_debug.a 
    ) 
ELSE() 
    SET(QT_LIBS 
     libqtharfbuzzng.a 
     libqtpcre.a 
     libQt5PlatformSupport.a 
     libxcb-static.a 
    ) 
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug") 

SET(OS_SPECIFIC_LIBS 
    dl 
    Qt5::QXcbIntegrationPlugin 
    ${CMAKE_THREAD_LIBS_INIT} 
    ${ZLIB_LIBRARIES} 
    ${PNG_LIBRARY}) 

FOREACH(lib_name ${QT_LIBS}) 
    IF(NOT EXISTS ${QT5_LIB_ROOT}/${lib_name}) 
     MESSAGE(FATAL_ERROR "Could not locate required Qt lib ${QT5_LIB_ROOT}/${lib_name}") 
    ENDIF() 

    LIST(APPEND OS_SPECIFIC_LIBS ${QT5_LIB_ROOT}/${lib_name}) 
ENDFOREACH(lib_name) 

そして、私はコードでXCBプラグインをインポートしていた場合(Q_IMPORT_PLUGIN(QXcbIntegrationPluginは)それは私にリンクエラーを与える:

/Qt5/plugins/platforms/libqxcb.a(qxcbmain.o): In function `QXcbIntegrationPlugin::create(QString const&, QStringList const&, int&, char**)': 
qxcbmain.cpp:(.text+0x67): undefined reference to `QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**)' 

ANF私はPLUをインポートしていない場合ジム - それはちょうどエラーで始まっていません:

This application failed to start because it could not find or load the Qt platform plugin "xcb" 

何か助けてください?助言?

ありがとうございました。

+0

私は静的リンクとCMakeは今のところ壊れていると思います。 https://bugreports.qt.io/browse/QTBUG-38913しかし、これは別の問題のように見えます - そして私はあなたが手動でプラットフォームプラグインにリンクするとは思わないと思います、CMake/Qt統合はそれの世話ですが、私は間違っているかもしれません... – peppe

+0

それは少し異なります。私が持っている問題は、Linuxに特有です。 OSXとWindowsで問題はありません(プラットフォームごとに異なるプラグインです)。 – Ation

答えて

1

ソリューションは簡単だった - ちょうど適切なシステムLIBSにリンク: はエーションの答えは、「未来に追加するには(私は問題を発見し、上記のコメントをNVM)

FIND_PACKAGE(X11 REQUIRED) 

SET(OS_SPECIFIC_LIBS 
    ... 
    xcb 
    X11-xcb 
    ${X11_LIBRARIES} 
) 
+2

私が何かを見逃してしまった場合は申し訳ありませんが、 'nm -gC libqxcb.a'は' QXcbIntegration :: QXcbIntegration'を未定義として表示します。答えがどのように解決するのか分かりません。それは私のために働かない(私はまったく同じ問題を抱えている)。あなたの 'CMakeLists.txt'はオープンソースなので見てみることができますか? –

1

を追加することで

を固定します私がこれをデバッグするために見つけた方法は、最小サンプルにqmakeを使用することです。

testcase.pro:

QT += core gui 
QTPLUGIN.platforms = qminimal qxcb 
CONFIG -= import_plugins 
CONFIG += static 
SOURCES += main.cpp 

main.cppに:

#include <QCoreApplication> 
#include <QDebug> 

#include <QtPlugin> 

Q_IMPORT_PLUGIN(QXcbIntegrationPlugin) 

int main(int argc, char **argv) 
{ 
    QCoreApplication app(argc, argv); 
    qDebug() << "Does something!"; 
    return app.exec(); 
} 

これが存在したら、qmakemakeを実行します。 makeの出力には、-l****のすべてが含まれており、CMakeプロジェクトの変数CMAKE_CXX_LINK_EXECUTABLEに入れる必要があります。私は自動化することができます。

関連する問題