問題描述
將我的Ubuntu從(10.11, 11.04 i dont know)
升級到11.10後出現了一些奇怪的錯誤。
我在使用math.h並使用-lm鏈接時獲得了undefined reference to 'sqrt'
我正在使用gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o
編譯source-files,並包含math.h.
這段代碼編譯沒有問題,自升級以來我沒有太大變化,但現在它不起作用。
你有什麽建議我可以做,找到錯誤?
對不起,如果以前問過這個問題;關於數學鏈接器錯誤的帖子太多了,我找不到匹配的錯誤
最佳解決方法
當您從命令行使用它時,您正在使用的庫需要放在使用它的文件之後。因此,在命令行上的C文件之後放置-lm
。
次佳解決方法
求助,這不是常見的缺失-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
你真的必須在-o foo foo.c參數之後放置-lm swith
Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$
所以在Makefile中交換你的標誌! GUYS。這是相當新的(和嚴重的)BUG!
第三種解決方法
由於鏈接器中的gcc標誌--as-needed
的默認激活,這是一個問題
更多信息:http://www.gentoo.org/proj/en/qa/asneeded.xml
簡單修複(至少對我有用):
將-Wl,--no-as-needed
添加到鏈接器
第四種方法
將Ubuntu升級到11.10版本後,我發現了同樣的問題。我使用Netbeans進行開發並通過指定”Mathematics”標準庫來解決問題:
右鍵單擊項目,單擊Properties,在菜單上選擇”Linker”,單擊”Libraries”,然後選擇”Mathematics”“Add Standard Library”。
當編譯’-lm’選項放在所有其他選項之後並且它可以工作。可能這個gcc版本遵循特定的體係結構,它期望命令編譯行末尾的庫。
幹杯!
D.
第五種方法
cc filename.c -lm
試試……….☻