共有ライブラリの読み込み中にエラーが発生しました。

共有ライブラリの読み込み中にエラーが発生しました。

私のプロジェクトツリーは次のとおりです。

src/
include/
Makefile
lib/
   lib/3rdparylib/

私はコーディングしませんが、3rdpartylibソースコードをプロジェクトパッケージに含めることにしました。次の手順を実行してソフトウェアをコンパイルしました。

$ cd lib/3rdpartylib/
$ make
$ ln -s 3rdpartylib.so.0 3rdpartylib.so

次に、それぞれをコンパイルします。私のものソースファイルは次のとおりです。

$ gcc -c src/file.c -I include -o file.o -l 3rdparylib -L lib/3rdpartylib -I lib/3rdpartylib/include

次に、次を接続します。

$ gcc file1.o file2.o -l3rdpartylib -L lib/3rdpartylib -o myapp

私がホストにいるときはうまくいきます。今日は別のコンピュータで起動しようとしました。問題なくコンパイルされリンクされます。ただし、アプリケーションを実行しようとすると、次のエラーメッセージが表示されます。

./myapp: 共有ライブラリの読み込みエラー: 3rdpartylib.so.0: 共有オブジェクト ファイルを開けません。そのファイルまたはディレクトリはありません。

私は以下を試してみます:

export LD_LIBRARY_PATH=/path/to/3rdpartylib.so

うまくいくようです。しかし、LD_LIBRARY_PATHを使用するのは悪い習慣であることを知っています。アプリケーションを実行するたびにこの変数を設定する必要があるのは面倒です。

私は何を見逃していますか?私のホストでは動作しますが(LD_LIBRARY_PATHは何も設定されていません)、他のコンピュータでは動作しないのはなぜですか?他のマシンが仮想マシンかどうかは重要ですか?

役に立つ場合、私のメインコンピュータはDebianコンピュータで、私の「新しい」コンピュータはVirtualboxで実行されているSabayon(Gentoo)です。

ベストアンサー1

重要なのは、各マシンがライブラリパスを異なる方法で処理するため、どのLinuxディストリビューションを使用しているかです。 Gentoo(Sabayon)システムでシステム全体でサードパーティのライブラリを使用するには、次の手順を実行する必要があります。

  • /etc/env.d/追加の設定を含むこのファイルの下にファイルを作成します。ファイル名はこのスキームを使用して指定されます[0-9][0-9]somename。 2 つの初期数字が使用される順序を決定します。良い方法は、カスタム設定(近く)を追加することです。最後99動作する限り、これは正しい開始です。タイトルへ:次の名前のファイルを作成します。

    /etc/env.d/99mythirdpartylib
    

    含む

    LDPATH=/path/to/your/library
    
  • 再起動せずに変更を適用するには、root として実行します。

    env-update && source /etc/profile
    

    (これにより、環境が更新され実行されますldconfig)。

引用する、あなたが望むなら。

おすすめ記事