gcc编译错误undefined reference to `__stack_chk_fail'

时间:2021-07-20 05:28:50
在网上查了资料,说是在编译时,在CFLAGS后面加上-fno-stack-protector,可是加上之后依然显示undefined reference to `__stack_chk_fail'
平台是ubuntu gcc版本是4.4版本

20 个解决方案

#1


貌似某些库没有链接上?

#2


 敢问lz你是如何编译的?    在终端上rpm -q gcc  glibc 看一看版本。  另外 也可能是你编译的顺序有问题。比如说有文件相互调用,但是低版本的gcc是不能自动识别的。    建议lz升级一下gcc

#3


还是不行啊gcc是最新的库也没问题,不会是最新版gcc不够稳定吧?

#4


没见过,等高手

#5


解决了,是忘记了将一个public加入.h文件,同时可能也有编译排序问题
多谢了!

#6


引用 5 楼 qq459673705 的回复:
解决了,是忘记了将一个public加入.h文件,同时可能也有编译排序问题
多谢了!


是在看于渊的书吧!最近我也遇到了同样的问题.....一直未解决
是如何解决的?
谢谢!!!

#7


这两天也遇到这个问题:可以在makefile的CFLAGS中添加-fno-stack-protector一项。

#8


估计是版本低吧,我也出现了LZ的情况,但加上-fno-stack-protector就OK了。

#9


解决了,是忘记了将一个public加入.h文件???????能不能说明白点啊,谢谢啦………………

#10


LZ 还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined reference to `__stack_chk_fail'”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除,所以貌似没有效果。后来你发现少了一个.h文件,将其改动,那么依赖就得到更新,Makefile就产生了效果,你自认为解决了问题,其实原因找错了。

#11


引用 10 楼 lampqiu 的回复:
LZ   还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined   reference   to   `__stack_chk_fail '”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除……


哥们,你太厉害了,看你的贴我把问题解决了。确实厉害啊

#12


引用 10 楼 lampqiu 的回复:
LZ   还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined   reference   to   `__stack_chk_fail '”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清……
兄弟 你太生猛了  看你的回复我把问题解决了!!!

#13


-fno-stack-protector正解

#14


10楼,神

#15


为什么我生成的Makefile里边没有CFLAGS呢

#16


各位高手,
我的makefile 文件里面有这行
YOGA_GLOBAL_CFLAGS = -pipe -fno-exceptions -ffunction-sections $(WARN_FLAGS)

我不明白  【 在CFLAGS后面加上了-fno-stack-protector】 是什么意思

我发现我系统里面的 stdio.h文件 内容很少,没有fread(),fopen,FILE,  我加上fread(),fopen,FILE后,编译就出现
gcc-4.1.2/newlib/libc/sys/aeonsim/glue.c:144: undefined reference to `___stack_base'
gcc-4.1.2/newlib/libc/sys/aeonsim/glue.c:144: undefined reference to `___stack_size'

#17


我也是看于渊的书碰到这个问题,在CFLAGS后面加上了-fno-stack-protector之后,执行make image(之前并没有清除以前的编译结果,也没有以任何方式改变文件之间的依赖关系),问题就解决了

#18


你们把我的问题解决了,我也在看于渊的书,在第5章,编译h的时候出现这个错误,错误处在disp_int这个函数,在lib\klib.c中,在CFLAGS后面加上了-fno-stack-protector之后就好了,不用清楚以前的编译结果,因为make image = make final building , final= all clean = realclean everything.所以已经自动清除了.

#19


  是学到了于渊那本书的第9章,磁盘驱动那一部分吧,,print_identify_info函数里的char s[64]可能被gcc判别为做溢出攻击的恶意代码,把它挪到全局变量也可以解决(虽然不太雅观)。
  我启用了-fno-stack-protector,ld又弹出来一句ld:-f may not be use without -shared,我加上了-shared,倒是链接成功,但链接出来的内核完全不能运行了。

#20


引用 10 楼 lampqiu 的回复:
LZ 还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined reference to `__stack_chk_fail'”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除,所以貌似没有效果。后来你发现少了一个.h文件,将其改动,那么依赖就得到更新,Makefile就产生了效果,你自认为解决了问题,其实原因找错了。
膜拜,好牛逼,原来要make clean一下才行

#1


貌似某些库没有链接上?

#2


 敢问lz你是如何编译的?    在终端上rpm -q gcc  glibc 看一看版本。  另外 也可能是你编译的顺序有问题。比如说有文件相互调用,但是低版本的gcc是不能自动识别的。    建议lz升级一下gcc

#3


还是不行啊gcc是最新的库也没问题,不会是最新版gcc不够稳定吧?

#4


没见过,等高手

#5


解决了,是忘记了将一个public加入.h文件,同时可能也有编译排序问题
多谢了!

#6


引用 5 楼 qq459673705 的回复:
解决了,是忘记了将一个public加入.h文件,同时可能也有编译排序问题
多谢了!


是在看于渊的书吧!最近我也遇到了同样的问题.....一直未解决
是如何解决的?
谢谢!!!

#7


这两天也遇到这个问题:可以在makefile的CFLAGS中添加-fno-stack-protector一项。

#8


估计是版本低吧,我也出现了LZ的情况,但加上-fno-stack-protector就OK了。

#9


解决了,是忘记了将一个public加入.h文件???????能不能说明白点啊,谢谢啦………………

#10


LZ 还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined reference to `__stack_chk_fail'”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除,所以貌似没有效果。后来你发现少了一个.h文件,将其改动,那么依赖就得到更新,Makefile就产生了效果,你自认为解决了问题,其实原因找错了。

#11


引用 10 楼 lampqiu 的回复:
LZ   还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined   reference   to   `__stack_chk_fail '”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除……


哥们,你太厉害了,看你的贴我把问题解决了。确实厉害啊

#12


引用 10 楼 lampqiu 的回复:
LZ   还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined   reference   to   `__stack_chk_fail '”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清……
兄弟 你太生猛了  看你的回复我把问题解决了!!!

#13


-fno-stack-protector正解

#14


10楼,神

#15


为什么我生成的Makefile里边没有CFLAGS呢

#16


各位高手,
我的makefile 文件里面有这行
YOGA_GLOBAL_CFLAGS = -pipe -fno-exceptions -ffunction-sections $(WARN_FLAGS)

我不明白  【 在CFLAGS后面加上了-fno-stack-protector】 是什么意思

我发现我系统里面的 stdio.h文件 内容很少,没有fread(),fopen,FILE,  我加上fread(),fopen,FILE后,编译就出现
gcc-4.1.2/newlib/libc/sys/aeonsim/glue.c:144: undefined reference to `___stack_base'
gcc-4.1.2/newlib/libc/sys/aeonsim/glue.c:144: undefined reference to `___stack_size'

#17


我也是看于渊的书碰到这个问题,在CFLAGS后面加上了-fno-stack-protector之后,执行make image(之前并没有清除以前的编译结果,也没有以任何方式改变文件之间的依赖关系),问题就解决了

#18


你们把我的问题解决了,我也在看于渊的书,在第5章,编译h的时候出现这个错误,错误处在disp_int这个函数,在lib\klib.c中,在CFLAGS后面加上了-fno-stack-protector之后就好了,不用清楚以前的编译结果,因为make image = make final building , final= all clean = realclean everything.所以已经自动清除了.

#19


  是学到了于渊那本书的第9章,磁盘驱动那一部分吧,,print_identify_info函数里的char s[64]可能被gcc判别为做溢出攻击的恶意代码,把它挪到全局变量也可以解决(虽然不太雅观)。
  我启用了-fno-stack-protector,ld又弹出来一句ld:-f may not be use without -shared,我加上了-shared,倒是链接成功,但链接出来的内核完全不能运行了。

#20


引用 10 楼 lampqiu 的回复:
LZ 还不结帖么,都一年了。从你解决问题的方式来看应该是这样一个情况:
其实你早就解决了问题,因为你在CFLAGS后面加上了-fno-stack-protector。但“可是加上之后依然显示undefined reference to `__stack_chk_fail'”出现的原因是你再次使用Makefile进行编译的时候,由于待编译文件没有改变,而且你未将先前编译的结果清除,所以貌似没有效果。后来你发现少了一个.h文件,将其改动,那么依赖就得到更新,Makefile就产生了效果,你自认为解决了问题,其实原因找错了。
膜拜,好牛逼,原来要make clean一下才行

#21