나는 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의 forward 선언과 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" "를 선언하면'fun2'라는 기호가'b.o'에 나타나며, 링커는 그 기호를 볼 것입니다. – loentar