为什么GCC交叉编译不生成“crti.o”?

为什么GCC交叉编译不生成“crti.o”?,gcc,arm,cross-compiling,Gcc,Arm,Cross Compiling,在尝试为arm构建GCC4.x.x交叉编译器时,我被$build\u DIR/gcc子目录中缺少的crti.o文件卡住了 顶层Makefile上的strace显示编译的xgcc正在调用交叉链接器ld,并将作为参数“crti.o”。我假设如果正在调用交叉链接ld,则本机/usr/lib/crti.o不是所需的 我可以看到,在gcc源代码树中有许多crti对象的潜在源代码(包括$SRC_DIR/gcc/config/arm/crti.asm) 如何配置gcc构建以确保生成此文件(或从ld命令中省略)

在尝试为arm构建GCC4.x.x交叉编译器时,我被
$build\u DIR/gcc
子目录中缺少的
crti.o
文件卡住了

顶层
Makefile
上的
strace
显示编译的
xgcc
正在调用交叉链接器
ld
,并将
作为参数“crti.o”
。我假设如果正在调用交叉链接
ld
,则本机
/usr/lib/crti.o
不是所需的

我可以看到,在gcc源代码树中有许多crti对象的潜在源代码(包括
$SRC_DIR/gcc/config/arm/crti.asm

如何配置gcc构建以确保生成此文件(或从
ld
命令中省略)?

这是我的配置行:

/x-tools/build/gcc-4.5.0$ ../../src/gcc-4.5.0/configure --target=arm-linux --prefix=/opt/arm-tools --disable-threads --enable-languages=c

真正的答案是,如果要构建arm elf目标,它应该编译
crti.o
在构建arm linux目标时,gcc人员合理地假设glibc以前已经编译过,它将提供
crti.o
启动。非常合理,如果您正在升级

构建一个新的根文件系统是另一个故事,一个自相矛盾的故事(谁先来:glibc还是gcc?)。一种方法(认可,但我还没有成功)是构建一个独立的gcc(比如说armelf\static),然后是glibc,然后是gcc

似乎有些人通过修改
gcc\config\arm\t-linux
解决了arm linux目标中缺少的
crti.o
。与其依赖不存在的glibc,不如使用arm-elf提供的
crti.o
版本。可以找到一个例子


您是否安装了glibc-devel?是的:但您认为这会有帮助吗?正在调用的链接器是交叉链接器,因此使用本机加载程序库将是。。。错。crti.o是一个C库而不是编译器,引导程序、链接器脚本等不是一个工具链,除了工具链之外,您还需要一些东西,比如glibc,用于跨工具可以找到的目标。
--- gcc-3.4.4/gcc/config/arm/t-linux    2003-09-20 17:09:07.000000000 -0400
+++ gcc-3.4.4.works/gcc/config/arm/t-linux  2005-05-25 20:44:07.000000000 -0400
@@ -18,3 +18,24 @@

 # LIBGCC = stmp-multilib
 # INSTALL_LIBGCC = install-multilib
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
+
+# If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here
+# EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+
+# Assemble startup files.
+$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
+   $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+   -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm
+
+$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
+   $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+   -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm
+
+# Disable libc link
+
+SHLIB_LC =