2012-10-18 53 views
0

我在編譯一些代碼,它使用了一個名爲staticlib.a的靜態庫中實現的函數。我也有名爲staticlib.h的頭文件,其中包含該函數的聲明。我的main,包含在包含staticlib.h的main.c文件中,只調用該函數,沒有別的。所以我編譯與 gcc main.c staticlib.a 和一切工作正常。我需要C++的某些功能,但是如果我正確更改main.cpp中的main.c並以相同方式編譯 gcc main.cpp staticlib.a 對我的函數發生了未定義的引用。我怎樣才能做到這一點?爲什麼會出現這個問題?我無法在我訪問過的任何網站上找到解釋... 謝謝你們所有的答案。在.cpp文件上鍊接一個靜態庫

+0

到OP,請接受一些答案,很顯然你不明白的計算器網站 – KevinDTimm

+1

的操作很好,到現在我已經取得3問題上計算器的網站,直到現在沒有任何answear完全解決了我的問題......在這個問題上,我已經收到了正確的答覆,現在我將接受它... – user1466609

回答

1

你必須定義庫中的函數作爲一個「C」的功能,而不是一個C++函數 - 這樣做在你的main.cpp

extern "C" 
{ 
#include "staticlib.h" 
} 
+0

謝謝,這項工作! – user1466609

1

C和C++編譯不同,C++使用名稱重整(將C++類型信息嵌入到目標文件中)。要停止這種行爲,以便可以從C++鏈接到C代碼,可以在包含C頭文件時使用C++中的extern C語法。

請看這裏 http://www.cplusplus.com/forum/general/1143/