当我构建gcc-4.0.4(在Ubuntu 10.10上)时,有一个问题:
arm-linux-ar rc ./libgcc.a libgcc /./_ udivsi3.o libgcc /./_ divsi3.o libgcc /./_ umodsi3.o libgcc /./_ modsi3.o libgcc /./_ dvmd_lnx.o libgcc /./_ muldi3.o libgcc /./_ negdi2.o libgcc /./_ lshrdi3.o libgcc /./_ ashldi3.o libgcc /./_ ashrdi3.o libgcc /./_ cmpdi2.o libgcc /./_ ucmpdi2.o libgcc /./_ floatdidf.o libgcc /./_ floatdisf.o libgcc /./_ fixunsdfsi.o libgcc /./_ fixunssfsi.o libgcc /./_ fixunsdfdi.o libgcc /./_ fixdfdi.o libgcc /./_ fixunssfdi.o libgcc /./_ fixsfdi.o libgcc /./_ fixxfdi.o libgcc /./_ fixunsxfdi.o libgcc /./_ floatdixf.o libgcc /./_ fixunsxfsi.o libgcc /./_ fixtfdi.o libgcc /./_ fixunstfdi.o libgcc /./_ floatditf.o libgcc /./_ clear_cache.o libgcc /./_ enable_execute_stack.o libgcc /./ trampoline.o libgcc /./ _main.o libgcc /./_ absvsi2.o libgcc /./_ absvdi2.o libgcc /./_ addvsi3.o libgcc /./_ addvdi3.o libgcc /./_ subvsi3.o libgcc /./_ subvdi3.o libgcc /./_ mulvsi3.o libgcc /./_ mulvdi3.o libgcc /./_ negvsi2.o libgcc /./_ negvdi2.o libgcc /./_ ctors.o libgcc /./_ ffssi2.o libgcc /./_ ffsdi2.o libgcc /./_ clz.o libgcc /./_ clzsi2.o libgcc /./_ clzdi2.o libgcc /./_ ctzsi2.o libgcc /./_ ctzdi2.o libgcc /./_ popcount_tab.o libgcc /./_ popcountsi2.o libgcc /./_ popcountdi2.o libgcc /./_ paritysi2.o libgcc /./_ paritydi2.o libgcc /./_ powisf2.o libgcc /./_ powidf2.o libgcc /./_ powixf2.o libgcc /./_ powitf2.o libgcc /./_ mulsc3.o libgcc /./_ muldc3.o libgcc /./_ mulxc3.o libgcc /./_ multc3.o libgcc /./_ divsc3.o libgcc /./_ divdc3.o libgcc /./_ divxc3.o libgcc /./_ divtc3.o libgcc /./ eprintf.o libgcc /./ _gcc_bcmp.o libgcc /./_ divdi3.o libgcc /./_ moddi3.o libgcc /./_ udivdi3.o libgcc /./_ umoddi3.o libgcc /./_ udiv_w_sdiv.o libgcc /./_ udivmoddi4.o libgcc /./ unwind-dw2.o libgcc /./ unwind-dw2-fde-glibc.o libgcc /./ unwind-sjlj.o libgcc /./ gthr-gnat.o libgcc /./ unwind-c.o *检测到缓冲区溢出* :arm-linux-ar终止 ======= Backtrace:========= /lib/libc.so.6(__fortify_fail+0x50)[0x8f1890] /lib/libc.so.6(+0xe478a)[0x8f078a)/lib/libc.so.6(+0xe3ec8)[0x8efec8] /lib/libc.so.6(_IO_default_xsputn+0x9e)[0x8765ee] /lib/libc.so.6(_IO_padn+0xd8)[0x869f78] /lib/libc.so.6(_IO_vfprintf+0x2b79)[0x84bd89] /lib/libc.so.6(__vsprintf_chk+0xad)[0x8eff7d] /lib/libc.so.6(__sprintf_chk+0x2d)[0x8efebd] arm-linux-ar [0x8050c05] arm-linux-ar [0x804ed7e] arm-linux-ar [0x805168c] arm-linux-ar [0x8055178] arm-linux-ar [0x804b7d2] 臂-Linux的AR [0x804c494] /lib/libc.so.6(__libc_start_main+0xe7)[0x822ce7] 臂-Linux的AR [0x80496e1] =======记忆地图:======== 003e4000-00400000 r-xp 00000000 08:01 131636 /lib/ld-2.12.1.so 00400000-00401000 r - p 0001b000 08:01 131636 /lib/ld-2.12.1.so 00401000-00402000 rw-p 0001c000 08:01 131636 /lib/ld-2.12.1.so 006b2000-006cc000 r-xp 00000000 08:01 131244 /lib/libgcc_s.so.1 006cc000-006cd000 r - p 00019000 08:01 131244 /lib/libgcc_s.so.1 006cd000-006ce000 rw-p 0001a000 08:01 131244 /lib/libgcc_s.so.1 0080c000-00963000 r-xp 00000000 08:01 132225 /lib/libc-2.12.1.so 00963000-00965000 r - p 00157000 08:01 132225 /lib/libc-2.12.1.so 00965000-00966000 rw-p 00159000 08:01 132225 /lib/libc-2.12.1.so 00966000-00969000 rw-p 00000000 00:00 0 00a42000-00a43000 r-xp 00000000 00:00 0 [vdso] 08048000-08097000 r-xp 00000000 08:01 427851
/ home / zouhansi / armlinux / tools / bin / arm-linux-ar 08097000-08098000 r - p 0004e000 08:01 427851
/ home / zouhansi / armlinux / tools / bin / arm-linux-ar 08098000-08099000 rw-p 0004f000 08:01 427851
/ home / zouhansi / armlinux / tools / bin / arm-linux-ar 08099000-0809d000 rw-p 00000000 00:00 0 09354000-09558000 rw-p 00000000 00:00 0
[堆] b74c1000-b74c8000 r - s 00000000 08:01 661517
/usr/lib/gconv/gconv-modules.cache b74c8000-b765b000 r - p 002a3000 08:01 657761 / usr / lib / locale / locale-archive b765b000-b785b000 r - p 00000000 08:01 657761 / usr / lib / locale / locale-archive b785b000-b785c000 rw-p 00000000 00:00 0 b785f000-b786b000 rw-p 00000000 00:00 0 bf839000-bf85c000 rw-p 00000000 00:00 0
[叠层]我从网络中找到一些解决方案,在其中添加“-D_FORTIFY_SOURCE = 0” CFLAGS。我像这样编辑Makefile:CFLAGS_FOR_BUILD = -g -O2 -D_FORTIFY_SOURCE = 0
我再说一次。但是这个问题又出现了。
你可以发一些评论吗?非常感谢。
答案 0 :(得分:1)
我在构建GCC交叉编译器时遇到了类似的问题 - 似乎binutils充满了对sprintf()的不安全调用。
对我有用的解决方法是设置:
export CFLAGS="-fno-stack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
这些必须在运行之前设置 ../ src / configure。
这里似乎有一个binutils补丁:http://www.redhat.com/archives/fedora-extras-commits/2009-November/msg06284.html但它并没有完全适用于我使用的源代码,所以我坚持使用CFLAGS hack。
答案 1 :(得分:0)
在我用最新版本的binutils交叉编译GCC之后,它运行起来了,而且我再也没有得到缓冲区溢出。
这是我在安装最新的binutils之后使用的行:
../gcc-4.5.1/configure --target=arm-linux --prefix=/.../toolchain/bin/binutils --disable-nls --disable-multilib --disable-shared --disable-decimal-float --disable--threads --disable-libmudflap --disable-libssp --disable-libgomp --enable-languages=c --with-system-zlib --with-newlib