1

我试图测试QNX 6.6.0和6.5.0之间的向后兼容性(与之前的question相比)。我使用SDP6.6.0编译了一个相对简单的程序,并在Neutrino 6.5.0上执行它。当我执行该程序的后续运行时错误弹出:QNX运行时错误:未知符号__stack_chk_guard

unknown symbol: __stack_chk_guard

ldd:FATAL: Could not resolve all symbols

是什么原因造成的..


(我已经找到了解决方案,但它不是rightaway工作时。我开始写这个问题,我意识到我犯的错误。为了将来的参考,我将在这里提供解决方案,作为我自己的Q &)。

回答

1

由于QNX被使用gcc(QCC):

“缓冲区溢出检测在当前启用和新的gcc在一些(稀有和复杂的)情况下,然而建立这可能导致运行时的并发症,如未定义symbol:__stack_chk_guard errors。在这种情况下,可能的解决方案是通过将-fno-stack-protector添加到由gcc编译选项使用的CFLAG列表中来禁用此功能“(另请参阅[1]和What is the use of -fno-stack-protector?)。

另外:我发现一个论坛thread,其中瑞安曼斯菲尔德(QNX编译铅维护者,我认为)说:

One problem [one] might hit trying to get 6.6.0 binaries to run on 6.5.0, is that everything is built is with -fstack-protector , which relies on support in libc. This wasn't in the 6.5.0 libc but IIRC, 6.5.0SP1 added.

因此,在QNX 6.5.0SP1这个问题似乎是固定的。

相关问题