0

C++ と Qt Creator を使用してプログラミングしています。プログラムを任意のデバイスに実装できるように、使用しているライブラリをプロジェクト フォルダー内に含める必要があります。正確にはどうすればよいですか?

ファイルを変更する必要があることはわかってい.proますが、すでにこれを試しました:

LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \

しかし、うまくいきません。次のエラーが表示されます: 共有ライブラリのロード中にエラーが発生しました: libvl.so: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

何か案は??ありがとう

4

1 に答える 1

0

まず、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/libld-linux.so.2ldconfig

ld-linux.so.2ライブラリを検索しようとすると、適切に定義された一連のディレクトリ (すべてコロンで区切られている) が次の順序で検索されます。

  • 存在する場合、いわゆるDT_RPATHであり、実行可能ライブラリに書き込むことができます ( deprecated )。
  • LD_LIBRARY_PATH(少なくともほとんどの実行可能ファイルについては、例外についてマニュアル ページを参照してください)
  • は(存在する場合)DT_RUNPATHに取って代わりますが、処理が完了するまでルックアップを遅らせます。およびを使用して、実行可能ファイルのパスも検索される Windows のような動作をシミュレートできます。ただし、この目的にははるかに適しています。DT_RPATHLD_LIBRARY_PATHRPATHRUNPATHLD_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
于 2013-09-25T11:04:29.237 に答える