Ошибка построения ELLCC

Запуск build скрипт из ELLCC приводит к этой ошибке

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 ответа

У меня была такая же проблема при компиляции binutils-2.24 на Mac OSX Mavericks 13.2.0 с помощью clang. Благодаря предложению Ричарда Пеннингтона, я смог получить binutils для компиляции, указав несколько других -Wno-error аргументы в gcc, установив CFLAGS перед запуском configure, А именно, это команды, которые я выполнил для сборки и установки 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 принимает --disable-werror аргумент, который отключает gcc, превращающий предупреждения в ошибки, и устраняет необходимость в настройках CFLAGS, С этим аргументом, строительство может быть сделано следующим образом:

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

Эта ошибка возникает из-за того, что sbrk() устарела в OSX, -Werror включен для сборки binutils, и компилятор (в данном случае "gcc" является псевдонимом для clang) справедливо жалуется на использование sbrk(). Я постараюсь устранить эту ошибку на этих выходных, когда мне не придется работать на работе.;-)

Я посмотрел на это немного больше. Это произошло потому, что в последней версии OS X (Mavericks) в качестве компилятора используется clang, а /usr/include/unistd.h объявлен устаревшим sbrk().

Решением было добавить опцию -Wno-error=deprecated-декларации в CFLAGS для binutils. Мне также пришлось внести несколько других изменений, чтобы завершить сборку Max OS. Вы можете найти последние материалы в дереве подрывной деятельности ELLCC.

Другие вопросы по тегам