makeするとライブラリが入っているのに /usr/lib/ld: cannot find と怒られる問題
make中に、こんなエラーが出ることがあります。
/usr/lib/ld: cannot find -lfoo
こんな風にlibfooというライブラリが見つからないと言ってきます。
そこで、ほんとに入っていないのか調べてみます。
$ ldconfig -p | grep libfoo
これで、本当にそのライブラリが入っていなかった場合は、インストールしてください。ただ、ライブラリが入っているのに上記のように怒られてしまうことが結構あります。
原因として、シンボリックリンクがきちんと張られていないというパターンが多いです。たとえば、libfoo.soというライブラリが2度バージョンアップして、libfoo.so.6とlibfoo.so.6.2があるとします。ふつうは互換性のため、
libfoo.so -> libfoo.so.6.2 libfoo.so.6 -> libfoo.so.6.2
という風に、古いファイル名からのリンクが張ってあると思います。でも、どうもこれがうまくできていないときがあります。たとえばこんな感じです。
$ ls -l /usr/lib/*foo* lrwxrwxrwx 1 root root 15 2008-00-00 00:00 libfoo.so.6 -> libfoo.so.6.2 -rw-r--r-- 1 root root 98765 2008-00-00 00:00 libfoo.so.6.2
libfoo.so.6.2からlibfoo.soへのリンクが張られてないですね。(RPMのせい?)。こんなときに、最初のような、ライブラリが見つからないよというエラーが出ることがあります。
$ sudo ln -s /usr/lib/libfoo.so.6.2 /usr/lib/libfoo.so
こうやってリンクを張ってあげれば解決です。
64bitのマシンを使っている人は、/usr/lib/のほうが大丈夫でも、/usr/lib64/のほうでうまくリンクできていないこともあるので、そっちを疑ってみるのも良いでしょう。
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
posted with amazlet at 20.03.08
SBクリエイティブ (2017-09-22)
売り上げランキング: 64,010
売り上げランキング: 64,010