このページとこのページの説明に従って、Ubuntu Linux で共有ライブラリをビルドして使用しようとしています。
ファイルをターゲット システムにコピーしてそこで実行するのではなく、PC でクロス コンパイラを使用してライブラリとアプリケーションをビルドしています。
最後に、すべてのシンボリックリンクが正しく定義され、アプリケーションを実行できる段階になりましたが、必要な形式ではありません。
libtest.so.1.0
directory に共有ライブラリがあるとしましょう/home/ysap/libs
。次に、シンボリックリンクlibtest.so.1
をlibtest.so
同じディレクトリに作成し、両方ともライブラリファイルを指しています。
ディレクトリには、ライブラリを使用/home/ysap/apps
するアプリケーション プログラムがあります。app.e
test
アプリケーションを実行するには、次のように入力します。
> LD_LIBRARY_PATH=/home/ysap/libs ./app.e
アプリケーションはうまく動作します。ただし、割り当てをなくしたいので、次のように入力してみました。
> export LD_LIBRARY_PATH=/home/ysap/libs
> ./app.e
残念ながら、次のようなエラーメッセージが表示されます。
./app.e: error while loading shared libraries: libtest.so.1: cannot open shared object file: No such file or directory
私も入力してみました:
> ldconfig -n /home/ysap/libs
と
> sudo ldconfig -n /home/ysap/libs
しかし、それは役に立ちません。
私は何を間違っていますか?変数の割り当てなしで app.e を実行するにはどうすればよいですか?
更新 1 :
アプリケーションはmmap()
呼び出しを使用するため、sudo権限で実行する必要があります。実際の呼び出し行は次のとおりです。
> sudo LD_LIBRARY_PATH=/home/ysap/libs ./app.e
export
-ed 変数がsudo環境で更新されない可能性はありますか?
更新 2 :
の出力ldd ./app.e
:
libtest.so.1 => /home/ysap/libs/libtest.so.1 (0xb6faa000)
libgcc_s.so.1 => /lib/arm-linux-gnueabi/libgcc_s.so.1 (0xb6f85000)
libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6ea4000)
/lib/ld-linux.so.3 (0xb6fb7000)