객체 ++ 나는 다음과 같은 설정이 있습니다링크하기 C 및 C 파일
을 main.c :
extern void sol();
int main(){
sol();
}
sol.cc : 나는 별도의 오브젝트 파일로 컴파일
#include<iostream>
using namespace std;
void sol(){
cout<<"HW!!\n";
}
:
를$gcc main.c -c
$g++ sol.cc -c
하지만 링크하려고 할 때 단일 실행에,
$g++ main.o sol.o
내가 얻을 : nm main.o
이 U sol
을 요구하면서 main.c:(.text+0x7): undefined reference to 'sol'
는 nm sol.o
는 00000000 T _Z3solv
이 있음을 보여줍니다. C++의 함수 이름을 변경하면 동일한 이름의 오버로드 된 함수를 피할 수 있습니다. 컴파일러에게 sol.o
의 이름이 바뀐 함수가 포함되어 있거나, 이름을 바꾸지 않고 sol.cc
을 컴파일하는 방법이 있습니까?
내가 그 통근자 "C"가 일어나고에서 이름 변경을 방지합니다 생각합니다. 즉. extern "C"void sol() {cout << "HW !! \ n";} – bizzehdee
'extern "C"'http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B#Linking_C_and_C.2B. 2B_code –
일반적으로'main()'함수는 C와 C가 혼합 된 프로그램에서'int main (int argc, char ** argv) {return c_main (argc, argv); }'전체에서 (extern "C"int c_main (int argc, char ** argv);와 같은 선언으로). 원래의'main()'은 간단히'c_main()'또는'real_main()'이나 다른 이름으로 변경되었습니다. –