QTアプリがQTモジュールを見つけた場所を設定するにはどうすればよいですか?
-
21-09-2019 - |
質問
libqtgui.so.4 libqtnetwork.so.4とlibqtcore.4を、アプリが存在する場所と同じディレクトリに含めたいと思います。 QTにこれを理解させるにはどうすればよいですか? Yの目的は、共有ライブラリを使用するスタンドアロンアプリを持つことです
解決
LD_LIBRARY_PATH環境変数の設定は1つのオプションです。例えば:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
別のオプションは、リンク中にQTアプリケーションのRPATを設定することです。 rpathを値「$ origin」に設定すると、動的リンカーは実行時にqtアプリケーションと同じディレクトリを表示します。たとえば、qmakeを使用している場合は、次のスニペットをプロジェクトファイルに追加します。
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
これにより、rpathが「$ ovirion:$ origin/lib:$ ogin/libs」に設定されます。つまり、動的リンカーは最初にQTアプリケーションの場所を見て、次にその場所のlibサブディレクトリで、次にlibsで見ることができます。その場所のサブディレクトリ、そして最終的にどのシステムでも定義された場所で。
他のヒント
Unix / Linuxは、システム標準LIBSを見る前に、最初にLD_LIBRARY_PATH(設定されている場合)を調べます。したがって、それを設定すると、実際にオーバーライドできます。 Windowsにパスを設定するのと同じように。同じ効果。順序付けが重要です。
./または。 ld_library_pathへ。
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH
と QMAKE_RPATH
私のために働いたことはありません。代わりに、設定します QMAKE_RPATHDIR
私の中で .pro
ファイル。たとえば、構築してインストールした後(make install
)QT、配置されています /usr/local/Trolltech/Qt-4.8.5/lib/
. 。次に、以下を書きます .pro
ファイル:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
注1:相対パスは機能しないようです。絶対パスを好む。
注2:その時 make
, 、次のオプションがリンカーに与えられていることがわかります。 -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
注3:バイナリが正しいライブラリに動的にリンクすることを確認するには、QTのバージョンを実行時に配信して表示できます。 qVersion()
.