2013-01-06 3 views
5

私は正常libawesomium-1.6.5.soをリンクすることができます 、共有ライブラリをリンクするカスタムLD_LIBRARY_PATHせずにプログラムを呼び出す

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

libawesomium-1.6.5.so

が、私は私のプログラムを呼び出そうと今(私は電話するよ、私の実行ファイルと同じディレクトリにありますそれは)今のPROG、それはして存在している:だから私は libawesomium-1.6.5.soを指すシンボリックリンク libawesomium-1.6.5.so.0を作る

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

、再びprogを実行すると、カスタム012でそれを呼び出して、私に同じエラーを与えますが動作しますが、私はprogを配布したいと考えています。ユーザーにprogをroot権限で(/usr/libなどのawesomiumをインストールして)使用でき、LD_LIBRARY_PATHを設定する必要はありません。 1つのオプションは、LD_LIBRARY_PATHを設定するシェルスクリプトですが、私は別の方法を好むでしょう(私も設定を聞いてLD_LIBRARY_PATHは悪い考えです)。

また、libawesomium-1.6.5.so.0へのシンボリックリンクを作成する必要がない場合は、素晴らしいことでしょう。

EDIT:

はリンカの動作に-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を設定

答えて

6

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

また、この引数には、実行されたプログラムが格納されているディレクトリを表す特別な値$ORIGINが使用されます。したがって、-Wl,-rpath='$ORIGIN'をgccに渡すと、プログラムと同じディレクトリにlibawesomium-1.6.5.soを保存することができます。

+0

うわー、これはうまく動作します!まあ、完璧ではない、私の編集を参照してください。 – dav1d

+0

私はそれを理解しました!自分のプログラムの中にawesomiumをロードする前に 'LD_LIBRARY_PATH'を設定することができます。 – dav1d

+0

'-Wl、-rpath = .'の代わりに' -Wl、-rpath = '$ ORIGIN''を渡すべきです.LI_LIBRARY_PATHは役に立たないでしょう。 – Julien

1

誤差があるためである動作します。あなたの道にはありません。 LD_LIBRARY_PATHを設定してバイナリを実行するbashスクリプトを配布したり、共有オブジェクトを/ usr/libまたは/ usr/local/libにコピーしたり、特定のプラットフォームに適した場所にコピーすることができます。

静的にリンクする場合を除き、実際にはショートカットはありません。

+0

ええ、私は両方の方法を避けたかったのです。他に方法がないことを明確にしてくれてありがとう。 awesomiumの静的ライブラリがないので、静的リンクは機能しません(クローズドソースのみ.soが提供されます)。 – dav1d

関連する問題