6

Sundownによって作成された共有ライブラリにリンクするサンプルプログラムをコンパイルしようとしています。私はそのようにプログラムをコンパイルしています。

$ gcc -o sd sundown.c -L. -lsundown

それでも、実行すると次のエラーが発生します。

./sd:共有ライブラリのロード中にエラーが発生しました:libsundown.so:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません

の出力はlsです。

$ ls
libsundown.so  libsundown.so.1  sundown.c  sd

共有ライブラリがで見つからないのはなぜldですか?

4

2 に答える 2

7

簡単な解決策:

.に(または-Lフラグからのものを)追加しますLD_LIBRARY_PATH。を実行するsdと、標準の場所にあるライブラリとLD_LIBRARY_PATHが検索されます。追加したので、これはlibsundown.soが入っているのと同じディレクトリから.実行した場合にのみ機能することに注意してください。sd

コンパイルしたバイナリを配布する予定です。LD_LIBRARY_PATHを編集しなくても、ライブラリを配布できるようにするにはどうすればよいですか?

libsundown.soは、/ usr/libや/usr/ local/libなどの標準的な場所の1つにインストールする必要があります。これは、インストーラーやmakeファイル、あるいはINSTALLやREADMEのような単純なものを使用して行うことができます。これにより、ユーザーはライブラリをそこに固定し、アクセス許可が適切なものに設定されていることを確認できます。

于 2012-06-20T00:45:28.433 に答える
0

/ usr/libおよび/usr/ lib64を使用するCentosシステムでは、64ビットライブラリを手動で/ usr / libにインストールすると、実行時にライブラリが表示されても、ビルド時に表示されない場合があります(autotoolsと/ usr / libからzopfliライブラリを問題なく見つけることができました)。/usr/lib/libzopfli.so.1にリンクするmy_binaryを実行すると、

libzopfli.so.1 => not found

libzopfly.so.1を/usr/libから/usr/ lib64に移動した後、すべてが正常に機能します。

于 2020-10-06T02:10:25.320 に答える