5

私は正常にリンクできますlibawesomium-1.6.5.so:

-L-L.
-L-lawesomium-1.6.5
-L-ldl

libawesomium-1.6.5.so実行可能ファイルと同じディレクトリにあります。プログラムを呼び出そうとすると(今のところprogと呼びます)、次のように存在します:

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory

libawesomium-1.6.5.so.0を指すシンボリックリンクを作成しlibawesomium-1.6.5.so、再度実行progすると同じエラーが発生し、カスタムLD_LIBRARY_PATH=./作品で呼び出しますが、配布progしたいので、ユーザーがprogルート権限なしで使用できるようにしたい (awesomium をインストールする/usr/libなど) とを設定する必要はありませんLD_LIBRARY_PATH。1つのオプションは、を設定するシェルスクリプトですがLD_LIBRARY_PATH、別の方法を好むでしょう(設定LD_LIBRARY_PATHは悪い考えだとも聞きました)。

さらに、 へのシンボリックリンクを作成する必要がなかったら素晴らしいことlibawesomium-1.6.5.so.0です。

編集:

-rpath=.リンカーに渡すとうまくいきます!しかし、残念ながら awesomium はそれを処理できません:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory

-rpath を使用し、prog 内から LD_LIBRARY_PATH を設定すると動作します

4

2 に答える 2

6

gcc を使用している場合-Wl,-rpath=lib_directoryは、ディレクトリ内のライブラリを検索する実行可能ファイルを作成するために渡すことができますlib_directory

$ORIGINさらに、この引数は、実行されたプログラムを含むディレクトリを表す特別な値を受け入れます。したがって、gcc に渡すと、プログラムと同じディレクトリ-Wl,-rpath='$ORIGIN'に保持できるようになります。libawesomium-1.6.5.so

于 2013-01-06T19:11:06.157 に答える
1

エラーの理由は . あなたの道にありません。オプションは、あなたが言うように、LD_LIBRARY_PATH を設定してバイナリを実行する bash スクリプトを配布するか、共有オブジェクトを /usr/lib または /usr/local/lib またはその特定のプラットフォームに適した場所にコピーすることです。

静的にリンクしたい場合を除いて、近道はありません。

于 2013-01-06T12:57:27.663 に答える