Han*_*xue 5 macos clang cross-compiling binutils 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);
^
Run Code Online (Sandbox Code Playgroud)
以下编译器使用了相同的结果:
我在使用clang在Mac OSX Mavericks 13.2.0上编译binutils-2.24时遇到了同样的问题.感谢Richard Pennington的建议,我可以-Wno-error通过CFLAGS在运行前通过设置为gcc 指定一些其他参数来获取binutils 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
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚注意到binutils configure脚本接受一个--disable-werror参数,该参数禁用gcc将警告转换为错误,并且不需要设置CFLAGS.有了这个论点,建筑可以按如下方式完成:
./configure --prefix=/usr/local/toolchain-arm-linux-elf --target=arm-linux-elf --disable-werror
make
make install
Run Code Online (Sandbox Code Playgroud)
发生此错误的原因是 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 subversion 树中找到最新的内容。
| 归档时间: |
|
| 查看次数: |
3948 次 |
| 最近记录: |