Ошибка построения 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.