2011-11-02 3 views
5

현재 제어 할 수없는 시스템에서 컴파일 할 프로그램을 얻으려고합니다. 내 CPP 파일에서 기본 헤더 검색 경로 덮어 쓰기

/usr/include: 
gmpxx.h gmp.h 

/usr/local/include: 
gmp.h 

, 내가

#include <gmpxx.h> 

사용이 /usr/include에서 올바른 파일을 발견, 그러나 : 나는 데

문제는 포함 디렉토리는 다음과 같이이다 gmpxx.h에 gmp.h가 포함되어 있으면 빌드를 중단하는 /usr/local/include에서 가져옵니다.

는 지금, 나는 #include </usr/include/gmp.h>
절대 경로가 꽤 추한 및 비 휴대용 포함 갖는 추가 문제 내 CPP 파일에서

  1. 3 개 매우 추한 솔루션을보고, 나는이 생각 일종의 것은 소스가 아닌 Makefile에 속해야합니다.

  2. 내 메이크에 -nostdinc 플래그를 추가하고 손으로 포함 경로를 지정

  3. 내가 정말 원하는 라이브러리 로컬 심볼릭 링크를 생성 한 다음 로컬은 (#include "gmp.h")

을 포함 할

누락 된 더 나은 솔루션이 있습니까? 다음과 같은 순서로 촬영 포함에 대한

+0

gmpxx.h를 수정할 수 있습니까? –

+0

나는 로컬 파일 (cpp, makefile)을 바꿀 수있는 유일한 것입니다. – cobbal

+0

# 2는 충분히 이해할 수 있습니다. Makefile은 파일을 빌드하는 방법을 보여줍니다. 다른 두 사람은 hackish 보인다. –

답변

12

검색 경로 :

따라서 두 가지 중 하나를 사용할 수 있습니다 (둘 중 더 좋거나 더 편리한 것으로 보이는 쪽).

+0

시도하지 않았습니다. CPLUS_INCLUDE_PATH, 그러나 -I의 문제점은 표준 기본값에 디렉토리를 주면 순서를 무시하고 먼저 넣지 않는다는 것입니다. – cobbal

+0

@ 코발 : 당신이 말하는 것을 봅니다. 예, 제가 링크 된 문서에 언급되어 있습니다. '-nostdinc' (당신이 이미 알고 있고, 당신이 동의하는 추악한 발견)과'-isystem' (http://gcc.gnu.org/onlinedocs/ 참조)의 두 가지 해결 방법을 언급합니다. gcc-4.3.2 // gcc/Preprocessor-Options.html). – ruakh

+0

CPLUS_INCLUDE_PATH가 정확히 필요한 것 같습니다. 감사합니다. – cobbal

0

/usr/local/include에서 gmp.h를 제거하거나/usr/local/include에 gmp.h를 갖고 싶은 소프트웨어 배포가있는 이유를 확인하고 배포본을 제거하십시오. 문제는 GMP에 대해 두 가지 충돌하는 헤더 파일 세트가있는 이유 때문입니다. 시스템에 표준 GMP 개발 파일을 설치 한 경우 (/ usr/include/...)/usr/local/include /에 다른 헤더 집합을 사용해야 할 이유가 없어야합니다. 당신은 꺾쇠 괄호

#include <gmpxx.h> 

당신이로

를 사용 gmpxx.h를 포함해야하기 때문에

, 그렇지 않으면 그것을 해결하기 위해 더 깨끗한 방법은 없습니다. 이제 gmpxx.h에는 꺾쇠 괄호를 사용하는 gmp.h가 포함되어 있으며 시스템의/usr/local/include에는/usr/include보다 우선 순위가 있습니다.

그래서 두 개의 gmp.h가있는 이유를 알아 내고 위조 된 것을 제거하는 것이 좋습니다. 헤더 파일 설정에 뭔가 비린내가 있습니다.

시스템 포함 디렉토리로 간주되므로/usr/include 및/usr/local/include를 쉽게 다시 채울 수 없으며 -I를 사용하려고하면 GCC에서 해당 옵션을 무시합니다.

+1

이것이 이상적 일지 모르지만 학교 컴퓨터이므로 헤더를 수정할 수는 없습니다. 나는 이것을 할 수 없기 때문에 나는 가장 깨끗한 해결 방안을 가지고 갈 것이다. – cobbal

+0

LOL 좋은 근거 : –