【问题标题】:install gcc 4.6.1 on OS X 10.11在 OS X 10.11 上安装 gcc 4.6.1
【发布时间】:2016-03-03 17:37:48
【问题描述】:

我在 OS X 上为MIT xv6 安装gcc 4.6.1

tar xjf gcc-core-4.6.1.tar.bz2
cd gcc-4.6.1
mkdir build
cd build
../configure --prefix=/usr/local \
    --target=i386-jos-elf --disable-werror \
    --disable-libssp --disable-libmudflap --with-newlib \
    --without-headers --enable-languages=c

直到make all-gcc

gtype-desc.c:8838:18: error: subscripted value is not an array,
      pointer, or vector
    sizeof (x_rtl[0]),
            ~~~~~^~
gtype-desc.c:8957:36: error: subscripted value is not an array,
      pointer, or vector
    sizeof (default_target_libfuncs[0]),
            ~~~~~~~~~~~~~~~~~~~~~~~^~
gtype-desc.c:9041:31: error: subscripted value is not an array,
      pointer, or vector
    sizeof (default_target_rtl[0]),
            ~~~~~~~~~~~~~~~~~~^~
gtype-desc.c:9062:31: error: subscripted value is not an array,
      pointer, or vector
    sizeof (default_target_rtl[0]),
            ~~~~~~~~~~~~~~~~~~^~
gtype-desc.c:9069:31: error: subscripted value is not an array,
      pointer, or vector
    sizeof (default_target_rtl[0]),
            ~~~~~~~~~~~~~~~~~~^~
gtype-desc.c:9076:31: error: subscripted value is not an array,
      pointer, or vector
    sizeof (default_target_rtl[0]),
            ~~~~~~~~~~~~~~~~~~^~
68 warnings and 6 errors generated.
make[1]: *** [gtype-desc.o] Error 1
make: *** [all-gcc] Error 2

make install-gccmake all-target-libgccmake install-target-libgcci386-jos-elf-gcc -v也有错误显示command not found

我应该怎么做才能解决这个问题?是否有替代使用命令i386-jos-elf-gcc

gcc --version

配置为:--prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1

Apple LLVM 版本 6.1.0 (clang-602.0.49)(基于 LLVM 3.6.0svn)

目标:x86_64-apple-darwin15.3.0

线程模型:posix

>

>

哪个gcc

/usr/bin/gcc

我好像有一个gcc编译器,但是已经重定向到clang了?

【问题讨论】:

  • 我最近在 OS X 10.9.5 下构建了 gcc-4.6.3,它几乎开箱即用。 gcc 构建的第 1 阶段在哪个编译器上运行?代码?我得到的印象是 gcc 4.6 对于 XCode 来说有点太旧了;我必须进行一些调整才能使其正常工作。 (尽管我遇到的错误与您显示的错误不同。)
  • 与您不同的是,我给configure 提供的选项更少,基本上只是--prefix=/usr/local/gcc(因为我正在安装它)。我认为您不需要其他选项,除非您尝试构建交叉编译器。 (您是否正在尝试构建交叉编译器?)
  • 此外,gcc 构建说明说您应该将构建目录放在解压缩的源目录中。 (我觉得这不仅仅是理论上的问题。)我建议从你的食谱中删除cd gcc-4.6.1 步骤,并将../configure 更改为../gcc-4.6.1/configure
  • @SteveSummit 我确实认为该选项是必要的,例如--target=i386-jos-elf。我正在努力i386-jos-elf-gcc
  • @SteveSummit 我正在尝试构建一个交叉编译器。检查the linkThe most difficult part of this process was figuring out how to compile gcc into an ELF cross compiler。但是,我不知道为什么我必须做这一切......

标签: macos gcc configuration cross-compiling


【解决方案1】:

[这不是一个完整的答案。]

首先,请参阅Building GCC on OS X 10.11 的答案。

第二:如果您正在尝试构建一个交叉编译器,强烈建议您首先引导一个本地版本的 gcc。另请参阅INSTALL/build.html 中的“构建交叉编译器”部分。我用--prefix=/usr/local/gcc 构建了我的,所以我的本地gcc 最终出现在/usr/local/gcc/bin/gcc 中。然后我将/usr/local/gcc/bin 添加到我的$PATH,并删除了/usr/bin/gcc/usr/bin/g++ 以确保安全。

正如build.html 指出的那样,您还需要一个“交叉汇编器”和“交叉链接器”。因此,您通常需要下载适当版本的 binutils,并在尝试构建您的交叉编译器之前构建那些 。 (这是我自己目前坚持的步骤。稍后我可能会对此进行更多说明。)

最后,如果您发现构建失败是因为配置不正确,因此您必须使用不同的选项重新运行 configure,删除整个构建目录并从头开始会更安全。有时,配置和构建系统(但似乎不是 100% 可靠)会检测到在这种情况下可能需要重建的内容。 (删除并重新开始很令人沮丧,我同意,但从长远来看,它确实可以节省时间。)

【讨论】:

  • 那么,关键是我应该在编译gcc时使用gcc而不是clang作为引导编译器?
  • @Rahn:我不知道 键,但肯定是一个重要因素。这听起来像是额外的工作,但我敢肯定,从长远来看,它会为您节省时间和挫败感。
  • 非常清楚:如果您从(现代版本的)MacOS 开始,并安装 Xcode,您就会遇到问题。现在,clang-pretending-to-be-gcc 足以引导真实 gcc 的本机副本。但建议您使用真正 gcc 的本机副本(not clang-pretending-to-be-gcc)来构建 gcc 交叉编译器。
【解决方案2】:

我现在也在为 MIT xv6 安装 gcc 4.6.1,但在 Ubuntu 上。不知道你有没有看到这个:

MAC OS X 10.7 "LION" NOTE: The default clang compiler on Mac OS X 10.7
cannot build a working version of GCC. Use the following configure
line to work around the problem (this has reported to work with OS X 10.9.4 withXCode 5.1.1 and its Command Line Tools package (for gcc):
../configure --prefix=/usr/local \
    --target=i386-jos-elf --disable-werror \
    --disable-libssp --disable-libmudflap --with-newlib \
    --without-headers --enable-languages=c \
    CC=/usr/bin/gcc-4.2 \

我从this page复制了它。(但我认为你没有必要使用那个命令,因为你说事情很好。) 如果您仍然有这个问题,this page 可能会给您一些提示。在您的 Mac 上,使用工具或命令 mdfind 查找文件 gengtype.c 的位置,并修改它在该页面上提到的代码。希望你能解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2016-10-08
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多