5

从 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);
         ^

以下编译器已用于相同的结果:

  • 海合会 4.8
  • llvm-gcc 2.8
  • llvm 3.3
4

2 回答 2

7

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

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 配置脚本接受一个--disable-werror参数,该参数禁用 gcc 将警告变成错误,并消除了对设置的需要CFLAGS。有了这个论点,构建可以如下进行:

./configure --prefix=/usr/local/toolchain-arm-linux-elf --target=arm-linux-elf --disable-werror
make
make install
于 2014-06-30T15:38:36.713 回答
2

发生此错误是因为 sbrk() 在 OSX 上已弃用,为 binutils 构建启用了 -Werror,并且编译器(在这种情况下,“gcc”是 clang 的别名)正确地抱怨使用 sbrk()。我将在本周末不必从事日常工作时考虑消除此错误。;-)

我仔细研究了一下。发生这种情况是因为最新版本的 OS X (Mavericks) 使用 clang 作为其编译器,并且 /usr/include/unistd.h 有一个已弃用的 sbrk() 声明。

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

于 2013-12-06T18:05:46.940 回答