我有a.c b.cpp文件。未定義引用「fun2()」
/****** a.c ******/
fun1(...)
{
..........
fun2(...); /* function present in b.cpp */
..........
}
/******* b.cpp *******/
extern "C" int fun2(...);
int fun2(...)
{
..........
}
我編的代碼如下:
a.o:a.c b.o
gcc -c -o a.o a.c b.o
b.o:b.cpp
g++ -c -o b.o b.cpp
但我發現了錯誤未定義參考 「FUN2()」。 這是編譯的正確方法還是我需要改變任何東西?
檢查你的fun2的前向聲明和fun2的定義是否有相同的參數。如果有相同的gcc應該編譯它沒有任何錯誤。 – loentar
正如rems4e回答的那樣,您需要一個函數原型。但你的鏈接也是錯誤的。您應該首先編譯源文件,然後在最後鏈接目標文件:'gcc -c a.o a.c && g ++ -c b.o b.cpp && g ++ -o myprogram a.o b.o' –
rems4e在100%不正確。所有「未知」C函數都有隱式聲明。請參閱http://stackoverflow.com/questions/4914589/c-prototype-functions。您可以通過添加頭文件或直接聲明將'fun2'的原型添加到'a.c'中,但這是可選的。當你在cpp中聲明'extern「C」'時,'b.o'中出現的符號'fun2'解鎖並且連接器將會看到那個符號。 – loentar