QNX运行时错误:未知符号__stack_chk_guard

时间:2015-05-29 16:56:32

标签: runtime-error backwards-compatibility buffer-overflow qnx qnx-neutrino

我正在尝试测试QNX 6.6.0和6.5.0之间的向后兼容性(在我之前的question的概率中)。我使用SDP6.6.0编译了一个相对简单的程序,并在Neutrino 6.5.0上执行。当我执行程序时,会弹出以下运行时错误:

  

未知符号:__ stack_chk_guard

     

ldd:致命:无法解析所有符号

造成这种情况的原因是什么?..

(我找到了解决方案,但它没有正常工作。当我开始写这个问题时,我意识到我犯了错误。为了将来的参考,我将在这里提供解决方案作为Q& A我自己)。

1 个答案:

答案 0 :(得分:1)

由于QNX正在使用gcc(qcc):

"在当前和较新的gcc构建中启用了缓冲区溢出检测,但在某些(罕见和复杂)情况下,这可能会导致运行时复杂化,例如未定义的符号:__stack_chk_guard错误。在这种情况下,可能的解决方案是通过将-fno-stack-protector添加到gcc编译选项"所使用的CFLAG列表中来禁用此功能。 (另见[1]和What is the use of -fno-stack-protector?)。

此外:我找到了一个论坛thread,其中Ryan Mansfield(QNX编译主管维护人员,我认为)说:

  

一个问题[一]可能会试图让6.6.0二进制文件在6.5.0上运行,   是所有内容都是-fstack-protector所依赖的   支持 libc 。这不是在6.5.0 libc 中,而是添加了IIRC,6.5.0SP1。

因此,在QNX 6.5.0SP1中,这个问题似乎已得到解决。