まず、Linux では、ビルド プロセスを制御するために使用される Makefile が qmake によって生成されます。行を追加すると
LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl
qmake は、適切な Makefile ターゲットが生成され、実行可能ファイルをリンクするとき.pro
に追加のライブラリを検索してライブラリに$$_PRO_FILE_PWD_/libs
リンクするようにリンカーに指示するようにします。libvl.so
ただし、発生しているのは実行時の問題です。具体的には、 at runtimeld-linux.so.2
などの共有ライブラリを見つけて動的にロードしようとします。これは、実行可能ファイルがロードされるときに、ユーザー定義 (および/またはディストリビューション定義) パスなどの組み込みパスを使用して発生します。の対応するマニュアル ページとのマニュアル ページを参照してください。これらは、標準的な方法でユーザー定義のライブラリ検索パスを構成するために使用されます。libvl.so
/usr/lib
ld-linux.so.2
ldconfig
ld-linux.so.2
ライブラリを検索しようとすると、適切に定義された一連のディレクトリ (すべてコロンで区切られている) が次の順序で検索されます。
- 存在する場合、いわゆる
DT_RPATH
であり、実行可能ライブラリに書き込むことができます ( deprecated )。
LD_LIBRARY_PATH
(少なくともほとんどの実行可能ファイルについては、例外についてマニュアル ページを参照してください)
- は(存在する場合)
DT_RUNPATH
に取って代わりますが、処理が完了するまでルックアップを遅らせます。およびを使用して、実行可能ファイルのパスも検索される Windows のような動作をシミュレートできます。ただし、この目的にははるかに適しています。DT_RPATH
LD_LIBRARY_PATH
RPATH
RUNPATH
LD_LIBRARy_PATH
- で指定されたディレクトリを使用して生成
/etc/ld.so.cache
されたキャッシュ ファイルに存在するライブラリ名ldconfig
/etc/ld.so.conf/
ld.so.conf
- 信頼できるディレクトリ、および
/lib
/usr/lib
上記のパスのいずれにも適切な共有オブジェクトが含まれていない場合、 でロードできなかったというエラーが表示されld-linux.so.2
ます。
あなたの場合の解決策は簡単で、さまざまなものがあります。
- プログラムを実行する前に、
LD_LIBRARY_PATH
を使用して環境変数を設定しますexport LD_LIBRARY_PATH={yourSearchPaths}
。
LD_LIBRARY_PATH
コマンドラインで実行可能ファイルの呼び出しに を追加します。LD_LIBRARY_PATH={yourSearchPaths} ./{executable}
- 実行可能な起動シェル スクリプトを提供
start.sh
する./start.sh