2016-08-18 222 views
-1

使用代碼::塊和GNU GCC編譯器,我就跟着去了,使我自己的圖書館:未定義參考++庫函數

//main.cpp (Library) 
int SampleAddInt(int i1, int i2) 
{ 
    return i1 + i2; 
} 

它編譯成某文件。然後我做了一個單獨的項目來測試庫函數。確保我在Build選項中正確鏈接了它。這裏是我的項目中使用它我的代碼:

//main.cpp (Test Project) 
#include <iostream> 


using namespace std; 

//Declaration of function from library 
int SampleAddInt(int i1, int i2); 

int main(){ 
    int x = SampleAddInt(2, 4); 
    cout << x << "test" << endl; 
} 

得到試圖編譯我的測試項目時,這個錯誤:

的main.cpp | 9 |未定義的參考`SampleAddInt(INT,INT)」 |

由於某種原因,它似乎無法找到此功能。然後,在我的測試項目main.cpp源文件的聲明周圍包裝了extern「C」{...},並且它構建正確。

爲什麼當我的庫從main.cpp源代碼編譯時,是否需要使用extern「C」作爲我的庫來使用我的測試項目?爲什麼當我不使用extern「C」時,編譯器告訴我該函數是一個未定義的引用?

+1

您是否意外地使用'gcc'編譯庫文件而不是'g ++'也許? –

+0

我使用了Code :: Blocks IDE。當我設置IDE時,它詢問我要使用哪個編譯器,並選擇了GNU GCC編譯器。這是不正確的?我記得讀過GNU GCC編譯器並編譯C和C++。這是我的系統中檢測到的唯一一個。 –

+0

這是相同的編譯器,是正確的,但你必須確保以C++模式編譯C++文件。如果使用'g ++',通常這是默認的。您應該看到在代碼塊的控制檯窗口中使用的命令行命令。 –

回答

0

得到它的工作。

問題是它與Code :: Blocks有關。

它使用的是gcc編譯器而不是g ++,因此如果我想運行我的任何庫代碼,我就被迫使用extern「C」。

爲了解決這個問題,我右鍵單擊main.cpp,單擊屬性,並將變量從「CC」更改爲「CPP」,現在它用g ++編譯。