编译gcc 4.6.2(无法计算目标文件的后缀)

时间:2012-02-04 14:09:46

标签: linux gcc compilation avr

编译gcc时出现问题4.6.2:

checking for avr-gcc... /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include 
checking for suffix of object files... configure: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

在我的gcc-4.6.2 / avr / libgcc / config.log中,我发现:

configure:3268: /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include -c -g -O2 conftest.c >&5
exec: 89: -o: not found
configure:3272: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU C Runtime Library"
| #define PACKAGE_TARNAME "libgcc"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "GNU C Runtime Library 1.0"
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
| 
| int
| main ()
| {
| 
| ;
| return 0;
| }
configure:3286: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure:3289: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

如果此命令直接运行(在创建conftest.c之后)输出将是相同的。

什么是exec:89:-o:找不到?写哪个程序呢? 89线在哪里?

导出LD_CONFIG_PATH或在/etc/ld.so.conf中添加包含GMP,MPFR,MPC路径的行的解决方案对我不起作用。

哪里可以找到解决此问题的方法?

更新。似乎是配置问题。 Gcc有很好的选择-v :-)而且我看到这是来自gcc的汇编程序调用,它失败了。使用选项-save-temps我保存了汇编源,并运行汇编程序,但这没关系。

而不是调用真正的汇编程序,它调用shell脚本包装器,在我的情况下是/ data / data6 / soft / src_build / avr-gcc / gcc / as,它起源于:

ORIGINAL_AS_FOR_TARGET=""
ORIGINAL_LD_FOR_TARGET=""
ORIGINAL_PLUGIN_LD_FOR_TARGET=""
ORIGINAL_NM_FOR_TARGET=""

当它形成命令行调用时,我们有:

exec -o conftest.o conftest.s

如上所述失败。

哪里有必要解决这个问题?要像这样打电话:     exec as -o conftest.o conftest.s

设置变量的好地方ORIGINAL_AS_FOR_TARGET?

2 个答案:

答案 0 :(得分:3)

我对mips进行交叉编译存在同样的问题。

第一步:交叉编译目标的binutils。将它们安装在理智的地方。我使用/ usr / local / [target] -gcc

确保使用--program-prefix = [target] -

配置它们

像(未经测试)的东西:

configure --prefix=/usr/local/avr-gcc --program-prefix=avr- --target=avr

然后你需要设置一些环境变量,以便GCC可以找到它们:

export AR_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ar
export LD_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ld
export OBJDUMP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-objdump
export NM_FOR_TARGET=/usr/local/avr-gcc/bin/avr-nm
export RANLIB_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ranlib
export READELF_FOR_TARGET=/usr/local/avr-gcc/bin/avr-readelf
export STRIP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-strip
export AS_FOR_TARGET=/usr/local/avr-gcc/bin/avr-as

现在您可以配置和编译GCC。确保从完全空的构建目录开始,否则gcc / as等不会被重新创建。

答案 1 :(得分:2)

“*建立海湾合作委员会并非易事,但如果您仔细遵循指示并不难。 许多人急于尝试构建它而不正确阅读安装文档并犯下一个或多个常见错误:

1)不要从gcc src dir运行./configure(这是不受支持的)=>您需要从gcc源目录外部运行configure

2)注意:如果GCC动态链接到必备库(GMP / MPFR / MPC),则在构建gcc和使用已安装的编译器时,共享库必须位于动态链接器的路径(LD_LIBRARY_PATH)中。*“

简单示例(没有动态链接到GMP / MPFR / MPC):

tar xzf gcc-4.8.0.tar.gz
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0 
make
make install

来源: Advogato Doc - GNU Doc