GCC 4.8 컴파일 오류: 시스템 헤더 디렉토리를 찾을 수 없습니다.

GCC 4.8 컴파일 오류: 시스템 헤더 디렉토리를 찾을 수 없습니다.

을(를) 컴파일하려고 합니다 GCC 4.8.3. 문서를 주의 깊게 읽었지만 여전히 내 시스템 cross compile에서 64bit작동하도록 할 수 없습니다. 나도 경험해봤어이 가이드. 하지만 내 요구 사항은 디렉토리 GCC에 빌드하는 것입니다. /tmp/xxx그러나 --with-sysroot& --with-native-system-header-dir플래그는 컴파일을 엉망으로 만듭니다. 문서에 따르면 플래그를 와 함께 사용해야 GCC합니다 .--with-sysroot--with-native-system-header-dir

--with-system-header-dir헤더 파일이 설치된 디렉토리의 이름을 승인합니다. 내 경우에는 ${TOOLS_DIR}절대 경로여야 하며 실제로 그렇습니다. 또한 --with-sysroot컴파일이 수행되는 폴더의 루트 경로가 필요합니다. 내가 아는 한 그렇습니다 ${INSTALL_DIR}.

INSTALL_DIR=/tmp/gcc-compile
TOOLS_DIR=${INSTALL_DIR}/tools

Linuxfromscratch가이드 에 따르면 호스트 컴퓨터의 루트 시스템에 폴더를 만들어야 합니다. 그런데 그러기 위해서는 sudo나에게 없는 허락이 필요했다. 그래서 GCC책에서 언급한 대로 대신 하위 디렉터리에서 컴파일 하고 싶습니다 (모든 사용자가 /tmp해당 디렉터리에 대한 읽기/쓰기 권한을 갖기 때문).

이제 GCC시스템 헤더 디렉토리를 찾을 수 없다는 오류와 함께 중지됩니다. 그리고 에서 검색을 시도합니다 /tmp/gcc-compile/tmp/gcc-compile/tools/include.잘못된 길.

내가 사용한 옵션은 다음과 같습니다.

sed -i "s#/tools#${TOOLS_DIR}#g" ../gcc-4.8.3-pure64_specs-1.patch

patch -Np1 -i ../gcc-4.8.3-branch_update-1.patch
patch -Np1 -i ../gcc-4.8.3-pure64_specs-1.patch

printf '\n#undef STANDARD_STARTFILE_PREFIX_1\n#define STANDARD_STARTFILE_PREFIX_1 "%s/lib/"\n' "${TOOLS_DIR}" >> gcc/config/linux.h
printf '\n#undef STANDARD_STARTFILE_PREFIX_2\n#define STANDARD_STARTFILE_PREFIX_2 ""\n' >> gcc/config/linux.h

mkdir   "${BUILD_DIR}"  &&
cd      "${BUILD_DIR}"  &&

AR=ar LDFLAGS="-Wl,-rpath,${CROSS_DIR}/lib"   \
../configure --prefix=${CROSS_DIR}            \
             --build=${HOST}                  \
             --target=${TARGET}               \
             --host=${HOST}                   \
             --with-sysroot=${INSTALL_DIR}    \
             --with-local-prefix=${TOOLS_DIR} \
             --with-native-system-header-dir=${TOOLS_DIR}/include \
             --disable-nls                    \
             --disable-static                 \
             --enable-languages=c,c++         \
             --enable-__cxa_atexit            \
             --enable-threads=posix           \
             --disable-multilib               \
             --with-mpc=${CROSS_DIR}          \
             --with-mpfr=${CROSS_DIR}         \
             --with-gmp=${CROSS_DIR}          \
             --with-cloog=${CROSS_DIR}        \
             --with-isl=${CROSS_DIR}          \
             --with-system-zlib               \
             --enable-checking=release        \
             --enable-libstdcxx-time

옵션 설정에 관해서는 이미 그에 관해 글을 썼는데 ${TOOLS_DIR}/includeGCC연구하려고 합니까 ${INSTALL_DIR}/${TOOLS_DIR}/include? 누군가 나에게 올바른 방향을 알려줄 수 있습니까?

산출

The directory that should contain system headers does not exist:
/tmp/gcc-compile/tmp/gcc-compile/tools/include
make[2]: *** [stmp-fixinc] Error 1
make[2]: *** Waiting for unfinished jobs....
rm gcc.pod
make[2]: Leaving directory `/tmp/gcc-compile/cross-compile-tools/gcc-    final/gcc-4.8.3/gcc-build/gcc'
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory `/tmp/gcc-compile/cross-compile-tools/gcc-final/gcc-4.8.3/gcc-build'
make: *** [all] Error 2

답변1

--with-native-system-header-dir옵션에는비교적옵션을 사용하여 지정된 디렉터리의 경로입니다 --with-sysroot. 따라서 예상대로 작동하려면 다음을 통과해야 합니다.--with-sysroot=${INSTALL_DIR} --with-native-system-header-dir=tools/include

답변2

sysroot의 소프트 링크를 통해 이 문제를 해결했습니다.

if:
--with-systroot=${INSTALL_DIR}
--with-native-system-header-dir=${INSTALL_DIR}/include

then:
pushd ${INSTALL_DIR}
mkdir -p ./${INSTALL_DIR}
cd ./${INSTALL_DIR}
ln -s ../(number of dirs up)/include include
popd

관련 정보