をコンパイルしようとしています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