當前位置: 首頁>>技術問答>>正文


在Ubuntu 11.10上有c數學鏈接器問題

, , , ,

問題描述

將我的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

Reference

次佳解決方法

求助,這不是常見的缺失-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

試試……….☻

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/6885.html,未經允許,請勿轉載。