« Freeiris开源中文通信项目十问十答(转) | (回到Blog入口) | 用Net::SMTP发邮件老出现Sender address rejected: not logged in »

运行libfetion-perl出现 __stack_chk_fail_local

最近因为系统移植,把以前在CentOS5.3环境的libfetion-perl在另外一个机器上重新编译安装。
编译和安装都很顺利,可当运行的时候Perl就报出__stack_chk_fail的错误。
找了很多资料,后来发现有人也遇见过同样的问题(原文参考),究其原因是因为gcc编译器的版本太低。
我查看了目标机器上的gcc 版本 3.4.6,而CentOS5.3上的gcc 版本 4.1.2 2007062,所以才会出现上述的错误。
解决方法按参考文章所述:
编辑/usr/include/sys/cdefs.h (系统不同可能路径也不同)文件,在最后一个#endif前面加上如下代码:
extern void __attribute__((noreturn))
        __stack_chk_fail(void);
extern void __attribute__ ((noreturn))
        __stack_chk_fail_local(void);


然后在libfetion的include中选任意一个.h结尾的文件加入以下2段代码

void __attribute__((noreturn))
__stack_chk_fail(void)
{
        ;
}

void __attribute__((noreturn))
__stack_chk_fail_local(void)
{
        ;
}

make的时候会报如下错误,无视掉好了:

login.c: In function `__stack_chk_fail':
login.c:114: warning: `noreturn' function does return
login.c: In function `__stack_chk_fail_local':
login.c:120: warning: `noreturn' function does return

至此模块可以正常使用了

引用通告

TrackBack URL for this entry:
如果您想引用这篇文章到您的Blog,
请复制下面的链接,并放置到您发表文章的相应界面中。
http://playcat.net/mt-tb.cgi/85

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

关于

此页面包含了发表于2009年9月 1日 16:13的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 Freeiris开源中文通信项目十问十答(转)

此 Blog 的后一篇日记是 用Net::SMTP发邮件老出现Sender address rejected: not logged in

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 6.3.2