リンカが探しているものを理解するには、冗長モードで実行します。
たとえば、ZLIBサポートを使用してMySQLをコンパイルしようとしたときにこの問題が発生しました。コンパイル中に次のようなエラーを受け取りました:
/usr/bin/ld: cannot find -lzlib
私はいくつかのグーグルを実行し、人々が.soファイルが実際に存在することを確認し、存在しない場合は、zlibなどのバージョン化されたファイルへのシンボリックリンクを作成すると言う、同じ種類の異なる問題に遭遇し続けました。 so.1.2.8。しかし、チェックしたところ、zlib.so DIDが存在しています。だから、きっとそれは問題にならないと思いました。
LD_DEBUG = allでmakeを実行することを提案するインターネット上の別の投稿を見つけました:
LD_DEBUG=all make
TONのデバッグ出力を取得しましたが、実際には役に立ちませんでした。それは何よりも混乱を追加しました。だから、あきらめようとしていました。
その後、私はひらめきを持っていました。実際に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
出来上がり!