2009-08-24 5 views
1

g ++에서 컴파일 된 c 및 C++ 파일이 혼합되어 있습니다. 설명 된대로 : What is the difference between g++ and gcc?g ++에서 gcc로 이주

c 파일은 g ++ 명령 줄과 함께 C++로 컴파일됩니다. 큰 문제는 아니지만 gcc로 마이그레이션하면 c 파일을 c 파일로 컴파일하고 C++ 파일을 C++로 컴파일 할 수 있습니다.

-I가 포함 또는 -L 라이브러리 내가 g ++ 명령 줄이 기본적으로 포함되어, gcc가 명령 줄에 추가 할 필요합니까 무엇?

답변

1

당신 어떤을 추가 할 필요가 없습니다한다. C++을 사용한다면 자동으로 C++ 라이브러리를 가져와야합니다.

하지 않으면, 당신은 -lstdc 할 것 ++ (그리고 당신은 여전히 ​​libc에 대한 -lc 정의되지 않은 참조를 얻는 경우). 수학 함수를 사용한다면 -lm을 잊지 마라. 당신은 어떤을 포함하거나 이미있는 것 이상의 라이브러리를 추가 할 필요가 없습니다

+1

링커 명령에 -lstdC++를 포함해야합니다. – simon

4

. C 함수의

Whatch 밖으로는 C++ 코드에서 호출되는 - 당신은 프로그램이 제대로 작동 연결되도록 C의 함수이다하는 C++ 컴파일러에 알려야합니다.

표준 방법은 C++ 파일에 포함되는 모든 C 헤더에 다음 지시문을 추가하는 것입니다

#ifdef __cplusplus 
extern "C" { 
#endif 

... C header contents go here ... 

#ifdef __cplusplus 
} 
#endif 
여기

더 많은 정보 : http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

+4

링커 명령에 -lstdC++를 포함해야합니다. – simon

0

왜 GCC와 함께 C 객체를 컴파일하지 C + +와 g ++ 그리고 링크를하면 g ++를 사용하여 링크합니까?

+0

아마 할 수는 있었지만 제 3 자의 소스가있는 상당히 복잡한 기존 메이크 파일을 원숭이와 갖고 싶지 않았습니다. – simon

1

GCC는 파일이 파일 확장명에 따라 인 언어를 확인할 수 있습니다.

#include <iostream> 

int main() 
{ 
    std::cout << "Hello world\n"; 
} 

그러나, GCC는 자동으로 대신 g++gcc를 사용하여 C++ 프로그램을 컴파일 할 수 있지만 -lstdc++ 지시문을 추가해야합니다 의미 실제로 C. 이외의 언어에 대한 런타임 지원에 연결하지 않습니다 g++ hello.cc

gcc hello.cc -lstdc++

더 정확하게, 당신은 당신이 표준 라이브러리, 예외 운영자 new, 또는 RTTI를 사용하는 경우 -lstdc++를 지정해야합니다. 예를 들어, -lstdc++없이 다음 컴파일 시도 :

int main() 
{ 
    try { 
     throw 1; 
    } 
    catch (int i) 
    { 
     return i; 
    } 
} 

기본적으로 운영자 new을 사용 (std::string들 포함)이 STL 컨테이너를 유의하시기 바랍니다. 엄밀히 말하면 -lstdc++이 없으면 표준 라이브러리에서 알고리즘 (std::min, std::find_first_of 등) 바인더와 몇 가지 다른 것들을 사용할 수 있어야합니다. 그러나 대부분은 그것을 포함 할 수도 있습니다 (링커는 실제로 링크하지 않음).

+0

그런 종류의 의미가 있습니다.C++ 표준 라이브러리 (std :: cout)를 사용하고 있으므로 명령 행에 분명히 포함시켜야합니다. 진짜 질문은 평범한 구식 C에서 C++ 표준 라이브러리를 사용하는 이유입니다. –

+0

@Gerco Dries : C 및 C++에는 여전히 int가 있습니다. 당신의 코멘트에서 뭐라고 말하려고합니까? –

+0

@ 그레코, 질문의 마지막 문장은 "무엇이 포함되어 있습니까? -L 라이브러리는 gcc 명령 줄에 추가해야합니까? g ++ 명령 줄에 기본적으로 포함되어 있습니까?" "나는 C++ 코드가 있고 GCC로 컴파일하고 싶다면, 그 코드를 작동시키기 위해 어떤 스위치가 필요합니까?" 예, 두 프로그램 스 니펫 모두 C++ 스 니펫이며 GCC로 컴파일하려면 명령 행 스위치 -lstdC++를 추가해야합니다. –

관련 문제