作为尝试构建 gcc 8.2 交叉编译器(针对 ia64-hp-hpux11.31)的一部分,我在构建 binutils 2.31.1 时遇到了问题。构建实际上似乎完成得很好。我以一堆二进制文件(ar、objdump、字符串等)结束,但缺少一些重要的文件,例如
as
和 ld
。我认为我正确配置了 binutils,明确启用 ld 并禁用 gold:../binutils-2.31.1/configure --target=ia64-hp-hpux11.31 --enable-ld=yes --enable-gold=no
。
我扫描了整个构建过程的stdout + stderr输出,但没有找到任何提示。唯一可疑的是
configure
输出:checking whether we are cross compiling... no
。既然我正在构建交叉编译,那不应该说是吗?如果我对 --build
、--host
和 --target
如何工作的理解是正确的,这是否意味着交叉编译?
我应该注意这是我第一次尝试构建交叉编译器。我还应该注意到,我的Linux“机器”是Windows Subsystem for Linux下的Ubuntu 16.04.2 LTS,也许这与它有关。
参见第 3744 行的
configure
脚本:
ia64*-**-hpux*)
# No ld support yet.
noconfigdirs="$noconfigdirs gdb libgui itcl ld"
;;
这会导致在构建过程中跳过
ld
目录。
不过,您应该有一个汇编器,构建为
gas/as-new
(在 make install
之后将安装为 ia64-hp-hpux11.31-as
)。
我使用此 Makefile 部分从
binutils
组合源代码树构建跨gcc
:
.PHONY: cross0
cross0: $(TMP)/gcc/binutils $(TMP)/gcc/gcc cclibs
rm -rf $(TMP)/gcc-build ; mkdir $(TMP)/gcc-build ; cd $(TMP)/gcc-build ;\
$(XPATH) $(TMP)/gcc/$(CFG) $(BINUTILS_CFG) $(GCC0_CFG) &&\
$(XPATH) $(MAKE) -j$(CORES) all-binutils all-ld all-gas &&\
$(XPATH) $(MAKE) install-binutils install-ld install-gas
(all|install)-binutils maketarget 至少不包括
ld
和 GNU as
所以必须单独完成
XPATH
变量看起来像PATH=~/$(USER)/cross:$(PATH)
,需要让configure
找到已经编译到交叉编译器工具链中的$(TARGET)-xxx工具,并在build中调用它们