在尝试为arm构建gcc 4.x.x交叉编译器时,我陷入了缺失的困境crti.o
文件在$BUILD_DIR/gcc
子目录。
An strace
在顶层Makefile
表明编译后的xgcc
正在调用交联器ld
with "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
真正的答案是它should编译crti.o
如果要建造一个手臂精灵目标。在建设一个ARM Linux目标,即gcc人们合理地假设glibc之前已编译过,它将提供crti.o
启动。完全合理,如果您要升级.
构建新的根文件系统是另一回事,这是一个自相矛盾的故事(首先是:glibc or gcc?)。一种方法(已认可,但我尚未成功)是构建一个独立的gcc (arm-elf\static,比如说)然后glibc, then gcc again.
似乎有些人已经解决了失踪的问题crti.o
in an ARM Linux通过修改目标gcc\config\arm\t-linux
。而不是依赖于不存在的glibc,拼凑是使用arm-elf提供的版本crti.o
。可以找到一个例子here http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff.
--- 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 =
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)