リンカーが探しているものを把握するには、冗長モードで実行します。
たとえば、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
大量のデバッグ出力が得られましたが、実際には役に立ちませんでした。何よりも混乱を招きました。だから、私はあきらめようとしていました.
それから、ひらめきがありました。 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
ディン、ディン、ディン...
そこで、最終的に修正して、(バンドルされたバージョンではなく) ZLIB の独自のバージョンで MySQL をコンパイルできるようにします:
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
出来上がり!
ライブラリ名が libxyz.so
の場合 そしてそれは次のパスにあります:
/home/user/myDir
次に、それをプログラムにリンクします:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog
そもそも必要なライブラリのインストールに失敗するという非常に一般的な初心者の問題に対処する答えはないようです.
Debianish プラットフォームでは、libfoo
の場合 が見つからない場合は、次のような方法で頻繁にインストールできます
apt-get install libfoo-dev
-dev
ソース コードをコンパイルしてライブラリにリンクするなどのささいな開発作業であっても、開発作業にはパッケージのバージョンが必要です。
パッケージ名には、いくつかの装飾が必要になる場合があります (libfoo0-dev
? foo-dev
lib
なし プレフィックス?など)、またはディストリビューションのパッケージ検索を使用して、特定のファイルを提供するパッケージを正確に見つけることができます。
(複数ある場合は、それらの違いを見つける必要があります。最もクールなものや最も人気のあるものを選ぶのが一般的な近道ですが、本格的な開発作業では受け入れられない手順です。)
他のアーキテクチャ (特に RPM) についても同様の手順が適用されますが、詳細は異なります。