Ubuntuを(10.11, 11.04 i dont know)
から11.10にアップグレードした後、奇妙なエラーが発生しました。
Math.hを使用しているときにundefined reference to 'sqrt'
が表示されますおよび-lmでリンク
私はgcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o
でコンパイルしています。両方のソースファイルがmath.hを使用し、インクルードします。
このコードは問題なくコンパイルされ、アップグレード以降はほとんど変更しませんでしたが、現在は機能しません。
エラーを見つけるために、私にできることはありますか?
この質問が以前に尋ねられた場合、申し訳ありません。数学リンカーエラーに関する投稿が非常に多く、一致するものは見つかりませんでした
使用しているライブラリは、コマンドラインから使用するときに、それを使用するファイルの後に配置する必要があります。だから-lm
コマンドラインでCファイルの後にオンにします。
[〜#〜]解決済み[〜#〜]、これは一般的な欠落ではありません-lm問題! (k)ubuntu 11.10にアップグレードした後も同じ状況です。
$ whereis math.h
math: /usr/include/math.h
Makefile:
CC=gcc
CFLAGS=--std=c99 -g -pedantic -Wall -lm
uname:
Linux idefix 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
-lmswithの後に-o foo foo.cパラメータ
Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$
Makefileでフラグを交換してください!男。これはかなり新しい(そして深刻な)バグです!
これは、リンカーでのgccフラグ--as-needed
のデフォルトのアクティブ化による問題です。
詳細はこちら: http://www.gentoo.org/proj/en/qa/asneeded.xml
簡単な修正(少なくとも私のために働いた):
リンカーに-Wl,--no-as-needed
を追加します
Ubuntuを11.10バージョンにアップグレードした後も同じ問題が見つかりました。次のように「数学」標準ライブラリを指定することで、問題の開発と解決にNetbeansを使用しています。
プロジェクトを右クリックし、[プロパティ]をクリックして、メニューの[リンカー]を選択し、[ライブラリ]をクリックして、[数学]を選択して[標準ライブラリの追加]をクリックします。
'-lm'オプションをコンパイルすると、他のすべてのオプションの後に配置され、機能します。おそらく、このgccバージョンは特定のアーキテクチャーに準拠しており、コマンドのコンパイル行の最後にライブラリーが必要です。
乾杯!
D.
cc filename.c -lm
ただ.............