/usr/bin/ld: cannot find -lm

投稿者: | 2013年6月1日

新しいVPSサーバを借りたので性能チェックと正しくインストールされているかどうかのチェックのために円周率を計算させてみた。どうもlibmつまり数学ライブラリが見つけられないと怒られている。そんなはずはないのだが。

CentOSで開発環境を一括セットアップするためにはグループインストールを利用する。

yum groupinstall 'Development tools'

大体においてグループ名はなんだったけ?と思い出せないものである。そんなグループインストールにどんなものがあるかを知りたい時は yum grouplistで出力されるリストの文字を指定すればよい。日本語環境にしていると日本語で表示されるので、とりあえずLANG=Cを指定すると良いだろう。

$ LANG=C yum grouplist

さて、ここで次の自分の作った円周率でベンチマークをしてみるという作業に入る。ダウンロードは次のページから行うことができる。

  • GNU/Linux上で円周率の計算をおこなう
    http://h2np.net/pi/index.html[リンク先]

コンパイル及び実行は自動化しているので、黙ってみていれば大丈夫なはずだが次のエラーが発生した関係で、異常終了してしまった。

/usr/bin/ld: cannot find -lm

libmは標準のライブラリに入っているはずである。パッケージは glibc-devel がグループインストールで入っているはずである。でもエラー。ぐぐってみたら、同じことで失敗している人がいた。

  • John’s Linux Blog
    http://blog.chrysocome.net/2012/09/usrbinld-cannot-find-lm.html[リンク先]

そこには”コンパイルに-static を指定している際は現在はglibc-staticが必要である”と書いてある。 スタティック用のライブラリはglibc-develからglibc-staticに移行しているらしい。この円周率計算のプログラムは実行時にダイナミックにリンクすることを意図的に避けているのでスタティックに作っている。理由は、同じ実行オブジェクトなのに他のライブラリがアップデートされたためにそちらを使い実行性能が違ってしまう、という事態を避けるためである。CentOSの基本Cライブラリレベルで構成がかわったとはつゆしらず。

yum install glibc-static

これで問題なく処理できるようになった。忘れないうちき書き留めておく。

“Why Pi?” – from Donald Knuth’s Computer Musings
stanfordonline

ちなみに円周率に関してのおすすめ本はこれだ。

キーワード: glibc 数学ライブラリ 標準ライブラリ ライブラリがみつからない コンパイル リンク ビルド エラー