2010-04-12 4 views
1

gcc를 사용하여 C++ 클래스를 컴파일하려고합니다. 빌드의 특성으로 인해 비표준 위치에서 gcc를 호출하고 시스템 정의가 아닌 헤더를 포함 시켜야만 다른 위치에서 세트를 추가해야합니다. 그러나이 작업을 수행 할 때 몇 가지 기본 기호 (suprise suprise)를 찾을 수없는 문제가 발생합니다. 같은 :시스템 정의 헤더 위치를 사용하지 않고 gcc 컴파일

$ (PARENT_DIR)는/usr /가 포함 I은 기본 헤더가 포함되지 않는 것을 나타냅니다 몇 가지 오류를 얻고있다

-->(PARENT_DIR)/usr/bin/gcC# invoke compiler 
-B$(PARENT_DIR)/usr/lib64/gcc/suselinux-x8664 
-B$(PARENT_DIR)/usr/lib64 
#C/C++ flags 
-fPIC -fvisibility=default -g -c -Wall -m64 -nostdinc 
# source files 
-I$(SRC_DIR_ONE)/ 
-I$(SRC_DIR_TWO) 
-I../include 
# 'Mock' include the system header files 
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION) 
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/backward 
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/x86_64-suse-linux 
-I$(PARENT_DIR)/usr/lib64/x86_64-suse-linux/$(GCC_VERSION)/include 
-I$(PARENT_DIR)/usr/lib64/gcc/x86_64-suse-linux/$(GCC_VERSION)/include 
-I$(PARENT_DIR)/usr/lib64/gcc/x86_64-suse-linux/$(GCC_VERSION)/include-fixed 
-I$(PARENT_DIR)/usr/src/linux/include 
-I$(PARENT_DIR)/usr/x86_64-suse-linux/include 
-I$(PARENT_DIR)/usr/include/suselinux-x8664 
-I$(PARENT_DIR)/usr/suselinux-x8664/include 
-I$(PARENT_DIR)/usr/include 
-I$(PARENT_DIR)/usr/include/linux 
file.cpp 

: 그래서 나는 기본적으로 내 코드를 컴파일하려면이 명령을 실행하고/C++/$ (GCC_VERSION)/cstddef :: prtdiff_t가 선언되지 않았습니다. $ (PARENT_DIR)/usr/include/C++/$ (GCC_VERSION)/cstddef :: size_t가 선언되지 않았습니다.

헤더 파일 디렉토리를 포함 할 때 내가 잘못하고있는 것이 있습니까? 아니면 잘못된 곳을보고 있습니까?

+0

포함 트리에 기호 링크가 있습니까? –

+0

@ D.Shawley 거기에있을 유일한 기호 링크는 gcc가 설치하는 링크입니다. $ (PARENT_DIR)은 본질적으로 gcc 설치의 루트 위치입니다. – bogertron

답변

3

아마도 --sysroot arg가 도움이됩니다 (gcc docs 참조).

+0

흠, 나는 이것을 시도했지만 여전히 같은 오류가 발생합니다. 비록 이것이 gcc의 멋진 깃발이라고해야합니다. 머리를 주셔서 감사합니다. – bogertron

+0

FYI, 크로스 컴파일러를 재배치했기 때문에 이것을 사용합니다. 빌드 스크립트에서'--sysroot = ...'와 함께'-I $ (sysroot)/usr/include/C++'와'-I $ (sysroot)/usr/include/C++/$를 추가합니다. (target)'여기서 target은 대상의 아치 dist-os 튜플입니다. 어쩌면 그것이 도움이된다면 도움이 될 것입니다 :) –

+0

물론 우리는 우리의 C++ 코드에 g ++를 사용하고 있습니다. 왜 표준 C 코드로이 문제에 부딪 치고 있는지 잘 모르겠습니다. –

관련 문제