usr/bin/ld: -l が見つかりません 質問する

usr/bin/ld: -l が見つかりません 質問する

プログラムをコンパイルしようとすると、次のエラーが返されます:

usr/bin/ld: cannot find -l<nameOfTheLibrary>

私の makefile では、コマンドを使用してg++、他のディレクトリにあるライブラリへのシンボリック リンクであるライブラリにリンクします。

動作させるために追加するオプションはありますか?

ベストアンサー1

リンカーが何を探しているのかを知るには、詳細モードで実行します。

たとえば、ZLIB サポートを使用して MySQL をコンパイルしようとしたときに、この問題に遭遇しました。コンパイル中に次のようなエラーが表示されました。

/usr/bin/ld: cannot find -lzlib

Google で検索してみたところ、同じ種類のさまざまな問題が次々と見つかりました。.so ファイルが実際に存在することを確認し、存在しない場合はバージョン管理されたファイル (例: zlib.so.1.2.8) へのシンボリック リンクを作成するようにという内容でした。しかし、確認してみると、zlib.so は確かに存在していました。だから、それが問題ではないはずだと思いました。

インターネット上で、LD_DEBUG=all で make を実行することを提案する別の投稿を見つけました。

LD_DEBUG=all make

大量のデバッグ出力が得られましたが、実際には役に立ちませんでした。何よりも混乱を招きました。そのため、私はあきらめようとしていました。

そこで、ひらめきました。ld コマンドのヘルプ テキストを実際に確認してみようと思いました。

ld --help

そこから、ld を詳細モードで実行する方法を見つけました (想像してみてください):

ld -lzlib --verbose

得られた出力は次のとおりです:

==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib

チン、チン、チン…

そこで、最終的にこれを修正して、MySQL をバンドル版ではなく独自の ZLIB 版でコンパイルできるようにしました。

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

出来上がり!

おすすめ記事