web-dev-qa-db-ja.com

Ubuntu 11.10でのc数学リンカーの問題

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を使用し、インクルードします。

このコードは問題なくコンパイルされ、アップグレード以降はほとんど変更しませんでしたが、現在は機能しません。

エラーを見つけるために、私にできることはありますか?

この質問が以前に尋ねられた場合、申し訳ありません。数学リンカーエラーに関する投稿が非常に多く、一致するものは見つかりませんでした

21
Hachi

使用しているライブラリは、コマンドラインから使用するときに、それを使用するファイルの後に配置する必要があります。だから-lmコマンドラインでCファイルの後にオンにします。

参考

27
user786653

[〜#〜]解決済み[〜#〜]、これは一般的な欠落ではありません-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でフラグを交換してください!男。これはかなり新しい(そして深刻な)バグです!

17
quido.speedy

これは、リンカーでのgccフラグ--as-neededのデフォルトのアクティブ化による問題です。

詳細はこちら: http://www.gentoo.org/proj/en/qa/asneeded.xml

簡単な修正(少なくとも私のために働いた):

リンカーに-Wl,--no-as-neededを追加します

9
Seldon_SL

Ubuntuを11.10バージョンにアップグレードした後も同じ問題が見つかりました。次のように「数学」標準ライブラリを指定することで、問題の開発と解決にNetbeansを使用しています。

プロジェクトを右クリックし、[プロパティ]をクリックして、メニューの[リンカー]を選択し、[ライブラリ]をクリックして、[数学]を選択して[標準ライブラリの追加]をクリックします。

'-lm'オプションをコンパイルすると、他のすべてのオプションの後に配置され、機能します。おそらく、このgccバージョンは特定のアーキテクチャーに準拠しており、コマンドのコンパイル行の最後にライブラリーが必要です。

乾杯!

D.

4
Diego
cc filename.c -lm

ただ.............

2
user2485132