我正在使用 sysroot 方法使用 GCC 4.6.3 构建 ARM 交叉工具链。如果我按照 LFS 说明将 gmp、mpfr 和 mpc 源文件夹复制到 GCC 源文件夹,则即使路径正确,构建也会失败,因为 mpc 无法找到 mpfr。
手动编译 gmp、mpfr 和 mpc 作为静态链接时,GCC 构建将完成,不会出现任何错误。
现在我的问题是我是否应该将 gmp、mpfr 和 mpc 安装到工具链构建目录中的随机位置,该目录在工具链完成后会被删除,这样它们就可用于 GCC 构建的不同阶段,或者我应该指向前缀位于 $SYSROOT 以便它们成为工具链的永久部分?最正确的做法是什么?
我对交叉编译器基础设施采取了不同的方法。我有一个目录:
$HOME/local
,包含所有预期的子目录:bin/, lib/, include/, etc.
$HOME/local/bin
(第一个)在我的$PATH
中,$HOME/local/lib
在$LD_LIBRARY_PATH
中(或达尔文上的$DYLD_LIBRARY_PATH
)。
然后我在
--prefix=$HOME/local
中构建并安装 gmp、mpfr、mpc,其中:
> ./configure --prefix=$HOME/local --enable-cxx [--disable-fft]
> ./configure --prefix=$HOME/local --with-gmp=$HOME/local
> ./configure --prefix=$HOME/local --with-mpfr=$HOME/local --with-gmp=$HOME/local
我可以为这些包使用快速的、平台相关的标志,这些标志通常不适用于具有交叉
--target
三重的gcc:
> env CFLAGS="-pipe -Wall -O2 -march=core2" CXXFLAGS="..." ./configure ...
优点是,无论我在哪里构建交叉编译器基础设施,gmp、mpfr、mpc 库、包含等都是可以访问的 - 并且相同的库可以用于多个交叉编译器。即,我有 4.6.x AVR、独立式 x86_64-pc-elf、ARM EABI。每个都使用
gcc
配置选项:
> --with-mpc=$HOME/local --with-mpfr=$HOME/local --with-gmp=$HOME/local
显然,当我检查工具链构建时(我经常这样做),至少我不必重复构建的这一部分。
构建交叉编译器是一项繁琐的任务。为什么不使用 crosstool-NG 自动执行构建交叉编译器所需的所有步骤?