2016-03-20 18 views
0

gccでコンパイルされたC++アプリケーションを、実行可能ディレクトリに必要な.soファイルを入れて展開しようとしています。リンカーフラグ-Wl,-rpath=$ORIGINを追加して、プログラムがリンクされているライブラリをそのディレクトリにあるディレクトリで探すようにしました。これは、実行可能ファイルに直接リンクされているすべてのライブラリが見つかるまで動作します(lddでチェックされます)。しかし

、私は次のエラーを取得するアプリケーションを起動しよう:

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

Available platform plugins are: linuxfb, minimal, offscreen, xcb. 

Reinstalling the application may fix this problem. 

プラグインは(実行ファイルのパスに対して)フォルダ./platformsに配置されているプラ​​ットフォーム。 Qtによって明らかに読み込まれた他の共有オブジェクトファイルのうちの1つはlibqxcb.soです。今、問題は、このファイルが再びlibQt5Gui.solibQt5Core.soなどに依存していることです。これらは私のアプリケーションパスにありますが、libqxcb.soが何らかの形でそれらを見つけることができないと思われます。どのように私はこれを修正する可能性はありますか?

私は、アプリケーションを実行するには、次のスクリプトを使用している場合は、それが(注:Ctは、実行可能ファイルの名前です):作品

#!/bin/sh 

DIR="$(cd "$(dirname "$0")" && pwd)" 
cd $DIR 
LD_LIBRARY_PATH=LD_LIBRARY_PATH:. ./Ct 

をしかし、私は、スクリプトを使用せずにこれを達成したいと思いますアプリケーションを実行します。

+1

「ldd」であなたの「libqxcb.so」をチェックすると、見つからなかったライブラリに関する疑問に対する回答が得られます。 – Arseniy

+0

質問を作成したときに私はすでに行いました。問題は、それが見つからない理由と、それをどのように修正できるかです(そのスクリプトでアプリケーションを開始することは別として)。 – user1488118

答えて

1

qtデプロイメント文書は特に役に立ちません。

この問題を解決する鍵は、libqxcb.soのldd出力を見て、libフォルダに入ることです。あなたがQTを設定する必要が最後に

unix:!mac{ 
    QMAKE_LFLAGS += "-Wl,-rpath,\'\$$ORIGIN/lib\'" 
} 

:project.proで

app 
|-- lib 
| |-- libQt5Core.so.5 
| |-- libQt5Gui.so.5 
| |-- libQt5DBus.so.5 
| |-- libQt5XcbQpa.so.5 
| |-- libicui18n.so.56 
| |-- libicuuc.so.56 
| `-- libicudata.so.56 
|-- qt.conf 
|-- app_exec 
`-- plugins 
    `-- platforms 
     `-- libqxcb.so 

は、libフォルダのためのアプリケーションRPATHを設定します。

libQt5Core.so.5 => <*>/plugins/platforms/./../../lib/libQt5Core.so.5 (0x00007f5f8374a000) 

ためのディレクトリ構造は、次のようにする必要があります.confあなたのアプリがプラグインを見つけることができるようにする(デフォルトではプラットフォームのフォルダから見える):

[Paths] 
Prefix=./ 
Libraries=lib 
Plugins=plugins 
+0

お返事ありがとうございました。私は時間があるとすぐにそれを試してみます。私には分かりませんが、ディレクトリツリーの '。/ bin 'は何ですか。実行可能ファイルはまだ 'app'フォルダに入っていますよね? – user1488118

+1

はい、申し訳ありませんが、実行ファイルになります。qt.confは実行可能ファイルと同じディレクトリになければなりませんhttp://doc.qt.io/qt-5/qt-conf.html – user1145065

+0

ありがとうございます、 。不可欠な部分は、 'Libraries = ...'行の 'qt.conf'ファイルでした。その結果、プラグインとしてロードされる共有オブジェクトファイルも依存関係を検出します。 – user1488118

関連する問題