2012-01-28 4 views
1

우분투에서 컴파일러 g ++ 4.6으로 C++ 공유 라이브러리 프로젝트를 만들었습니다.
종속성 라이브러리 중 일부는 그러나 이클립스가 자동으로 정의하지 않습니다 일부 전처리 Eclipse Indigo C++ 프로젝트 설정

#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__) 

처럼, 컴파일러와 제대로 컴파일 운영 시스템에 대한
명령 기대 (내가 사용 적어도 버전) Eclipse에 설정 또는 옵션이 있습니까?

답변

2

프로젝트 속성에 사전 처리기 정의를 설정할 수 있습니다 : .

그러나 귀하의 경우에는 컴파일러와 관련하여 특정 프로젝트가 아니어야하므로이 유형은 사용하지 않을 것입니다. 사실 네가 이걸 찾고 있다고 생각해. 나는 llvm/clang (그 중 하나는 있지만, 지금은 기억이 나지 않습니다.)을 모르지만, GCC의 경우 컴파일러가 정의 할 매크로 __GNUC__을 사용해야합니다. 걱정할 필요가 없습니다. . 선행 밑줄은 표준의 일부가 아니며 다른 컴파일러 (예 : MSVC)를 사용할 때 반드시 정의되지는 않는다고 알려줍니다. vsprintf_s의 크로스 플랫폼 사용에 대한


:

// this will be set on Visual Studio only, so this code is added for all other compilers 
#ifndef _MSC_VER 
#define vsprintf_s(b,l,f,v) vsprintf(b,f,v); 
#endif 

그러나 일반적으로 (이 경우 사용 vsnprintf() 대신에,이 예를 들어) 모든 플랫폼에서 사용할 수있는 기능을 사용하려고

.

+0

내 프로젝트 vsprintf_s이 함수는 마이크로 소프트 구현이지만, 이클립스는 자동으로 전처리 명령을 추가하지 않으므로 수동으로 추가하고 싶지는 않습니다. 결과적으로이 컴파일러 오류로 끝납니다 : "glm/core /.././ gtx/string_cast.inl : 26 : 30 : 오류 : 'vsprintf_s'가이 범위에서 선언되지 않았습니다." 의존성 라이브러리를 올바르게 설정하십시오. 다음은 내 설정 파일 http://glm.g-truc.net/api-0.9.0/a00076_source.html에 대한 링크입니다. – Cihan

+0

또한 이것을 추가하고 싶습니다. /* echo ""| g ++ -E -dM -x C++ - | sort */ 이 명령을 콘솔에 쓰면 Mario가 말한 것처럼 컴파일러가 자동으로 정의한 전 처리기 명령을 보여줍니다. 내 오류의 원인은 전 처리기 명령과 다른 것이라고 생각합니다. – Cihan

+0

'_s' 접미사가 붙은 표준 함수는 MSVC 만 추가하여 버퍼 오버런을 방지합니다. 헤더 파일에 간단한 "호환성 정의"를 추가하십시오 (위의 간단한 예제를 추가 할 것입니다). – Mario

관련 문제