我正在使用Linux的64位CentOS版本。我試圖在C和C++程序中創建和使用一個靜態庫(libUtility.a)。我可以用C編譯庫,並用ar生成libUtility.a文件。然後我嘗試將它鏈接到我的程序中。一切正常,當我使用C編譯器使用g ++鏈接問題,但不使用cc
cc myprog.c -o myprog -I/usr/local/include -L/LocationOfMyLib -lUtility
但是,當我使用g ++編譯器時,我收到錯誤。
g++ myprog.c -o myprog -I/usr/local/include -L/LocationOfMyLib -lUtility
myprog.c: In function 'int main(int, char**)':
/tmp/cckIN1Yk.o: In function `main':
myprog.c:(.text+0x41): undefined reference to `Utility_HiWorld(char*)'
collect2: ld returned 1 exit status
我有C和C++適度經驗,但是沒有經驗創造我自己的 庫。這個庫只有一個名爲Utility_HiWorld()的子例程。而myprog.c只能調用一個子例程。我在這裏做錯了什麼?
新:好的,我絕對沒有使用'extern「C」'。我甚至不知道那是什麼。這解決了它。
事實上,C++編譯器能夠告訴你鏈接時**的函數參數**的類型應該警告你。 – 2013-09-22 17:51:49
在庫的頭文件中缺少'extern「C」'? – user786653
C和C++是不同的語言。如果你用C++編譯器編譯你的C程序,它可能會也可能不會工作。 –