我正在尝试编译GCC 4.8.3
.我已经仔细阅读了文档,但我仍然无法cross compile
对64bit
系统进行操作。我也经历过本指南。但我的要求是建立GCC
在/tmp/xxx
目录中。但是--with-sysroot
&--with-native-system-header-dir
标志搞乱了编译。根据 的文档GCC
,我需要将--with-sysroot
flag 与 一起使用--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