2012-02-22 126 views
-1

我想做一個簡單的函數,涉及sqrt()floor()pow()。所以,我包括了<math.h>。當我嘗試使用我的功能時,我的程序說sqrt()floor()不存在。我三重檢查了我的文件並重寫了它們,但它仍然給出了相同的錯誤。只是爲了檢查<math.h>目錄是否有任何問題,我做了另一個單獨的文件,計算出相同的結果,並且它的工作。我現在無能爲力。我究竟做錯了什麼?包含文件C

非運作程序的代碼:

#include <math.h> 
#include "sumofsquares.h" 

int sumofsquares(int x){ 
    int counter = 0; 
    int temp = x; 

    while(temp != 0){ 
     temp = temp - (int)pow(floor(sqrt(temp)), 2); 
     counter ++; 
    } 
    return counter; 
} 

工作測試文件:

的錯誤是這樣

/tmp/ccm0CMTL.o:在功能sumofsquares': /home/cs136/cs136Assignments/a04/sumofsquares.c:9:undefined reference to sqrt' /home/cs136/cs136Assignments/a04/sumofsquares.c:9:未定義 參考地板」 collect2:LD返回1退出status`

我在虛擬的Ubuntu操作系統中使用runC編譯

+5

什麼是確切的錯誤?你如何編譯你的程序? – cnicutar 2012-02-22 17:07:10

+0

@cnicutar:錯誤是這個'/tmp/ccm0CMTL.o:在函數'sumofsquares'中: /home/cs136/cs136Assignments/a04/sumofsquares.c:9:undefined對'sqrt'的引用 /home/cs136/cs136Assignments/a04/sumofsquares.c:9:未定義的引用'floor' collect2:ld返回1退出狀態' 我在一個虛擬的Ubuntu操作系統上使用runC來進行complile。 – user1222282 2012-02-22 17:13:37

+0

這是* linkage *問題,而不是* include *問題。通過cnicutar檢查答案。 – karlphillip 2012-02-22 17:17:57

回答

8

您可能會錯過鏈接數學庫所需的參數gcc。嘗試:

gcc ... <stuff> ... -lm 

至少有兩個C常見問題解答相關問題的方法:

+0

我實際上使用RunC,所以這不適用於我。 :( – user1222282 2012-02-22 19:45:58

+1

「RunC是一個簡單的(有點粗糙的)系統,可以幫助你在Unix下使用C++作爲腳本語言。」我們這裏有這個粗略的證據,你需要弄清楚如何配置RunC以正確鏈接你的腳本。 – 2012-02-22 19:58:08