을(를) 컴파일하려고 합니다 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}/include
왜 GCC
연구하려고 합니까 ${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