构建ELLCC时出错

时间:2013-12-06 14:24:03

标签: macos clang cross-compiling binutils ellcc

从ELLCC运行build脚本会导致此错误

gcc -DHAVE_CONFIG_H -I. -I../../../src/binutils/binutils  -I. -I../../../src/binutils/binutils -I../bfd -I../../../src/binutils/binutils/../bfd -I../../../src/binutils/binutils/../include -I./../intl -DLOCALEDIR="\"/Library/Caches/Homebrew/ellcc--svn-HEAD/lib/share/locale\"" -Dbin_dummy_emulation=bin_vanilla_emulation  -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -Wno-unused-value -Wno-shadow  -MT nm.o -MD -MP -MF .deps/nm.Tpo -c -o nm.o ../../../src/binutils/binutils/nm.c
../../../src/binutils/binutils/nm.c:1690:28: error: 'sbrk' is deprecated
      [-Werror,-Wdeprecated-declarations]
      char *lim = (char *) sbrk (0);
                           ^
/usr/include/unistd.h:582:7: note: 'sbrk' declared here
void    *sbrk(int);
         ^

以下编译器使用了相同的结果:

  • gcc 4.8
  • llvm-gcc 2.8
  • llvm 3.3

2 个答案:

答案 0 :(得分:7)

我在使用clang在Mac OSX Mavericks 13.2.0上编译binutils-2.24时遇到了同样的问题。感谢Richard Pennington的建议,我通过在运行-Wno-error之前设置CFLAGS来指定gcc的其他configure个参数,从而能够编译binutils。也就是说,这些是我为构建和安装binutils而运行的命令:

CFLAGS="-Wno-error=deprecated-declarations -Wno-error=unused-variable -Wno-error=unused-function" ./configure --prefix=/usr/local/toolchain-arm-linux-elf --target=arm-linux-elf
make
make install

编辑:我刚注意到binutils configure脚本接受--disable-werror参数,该参数禁用gcc将警告转换为错误,并且不需要设置CFLAGS。有了这个论点,建设可以按如下方式进行:

./configure --prefix=/usr/local/toolchain-arm-linux-elf --target=arm-linux-elf --disable-werror
make
make install

答案 1 :(得分:2)

发生此错误是因为在OSX上不推荐使用sbrk(),为binutils构建启用了错误,编译器(在本例中为“gcc”是clang的别名)正确地抱怨使用sbrk() 。我将在本周末考虑消除这个错误,因为我不必参加我的日常工作。 ; - )

我进一步研究了一下。之所以发生这种情况,是因为最新版本的OS X(Mavericks)使用clang作为其编译器,而/usr/include/unistd.h则使用了不推荐的sbrk()声明。

解决方案是在CFLAGS中为binutils添加-Wno-error = deprecated-declarations选项。我还必须进行一些其他更改才能完成Max OS构建。您可以在ELLCC subversion树中找到最新的内容。