2

次の構成フラグを使用して、システムと非 root ユーザーに libcurl を正常にインストールしました。

./configure --prefix=/path/to/lib --exec-prefix=/path/to/lib --bindir=/path/to/lib

次のようにコンパイルを実行すると、すべてが機能します。

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -o client

結果のプログラムを実行しようとすると、問題が発生します。次のエラーが表示されます。

client: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

少しググったところ、ここでバグとして報告された(そして拒否された)ことがわかりましたが、問題を解決する方法はまだはっきりしていません。応答で提案されているように使用ldconfigするには、ルート権限が必要ですが、明らかに持っていません。

これをすべて機能させるためにできることはありますか?これは単純なはずですが、もしそうなら、私はそれを完全に見逃しています...

4

2 に答える 2

2

環境変数に依存したくない場合は、rpathを使用できます。

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -Wl,-rpath,/path/to/lib -o client

これにより、実行可能ファイルがハードコーディング/path/to/libされるため、ダイナミックリンカが最初に実行可能ファイルを検索します.so

(一般的な場合、使用-rpathは悪い習慣と見なされることにも注意してください。RPATHディレクトリがroot以外の人によって書き込み可能である場合、セキュリティの問題が発生する可能性があります。)

于 2012-11-23T07:41:03.427 に答える
1

環境変数を設定してLD_LIBRARY_PATH、共有ライブラリを探す場所をプログラムに動的に伝えます。あなたの場合、Bourne/bash シェルを使用すると、次のようなことができます。

$ LD_LIBRARY_PATH=/path/too/lib
$ export LD_LIBRARY_PATH
$ ./client

詳細については、共有ライブラリの HOWTOを参照してください。また、一般に、本番ソリューションを検討するべきではないことにも注意してLD_LIBRARY_PATHください。最終的には、システム管理者にシステム ロード パスを設定してもらうか、ライブラリを正しい場所にインストールしてもらう必要があります。

于 2012-11-23T07:13:03.627 に答える