1

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

未知符号:__stack_chk_guard

ldd:FATAL: 无法解析所有符号

这是什么原因造成的?...


(我找到了解决方案,但它没有立即工作。当我开始写这个问题时,我意识到我犯的错误。为了将来的参考,我将在此处作为问答提供解决方案)。

4

1 回答 1

1

由于 QNX 使用 gcc (qcc):

“在当前和较新的 gcc 版本中启用了缓冲区溢出检测,但是在某些(罕见和复杂)情况下,这可能会导致运行时并发症,例如未定义符号:__stack_chk_guard错误。在这种情况下,可能的解决方案是通过添加-fno-stack-protector来禁用此功能gcc 编译选项使用的CFLAG列表”(另见 [ 1 ] 和-fno-stack-protector 的用途是什么?)。

另外:我发现了一个论坛帖子,其中 Ryan Mansfield(我认为是 QNX 编译器首席维护者)说:

尝试让 6.6.0 二进制文件在 6.5.0 上运行时可能遇到的一个问题 [one] 是,一切都是用 构建的-fstack-protector,这依赖于libc的支持。这不在 6.5.0 libc中,而是在 IIRC,添加了 6.5.0SP1。

因此,在 QNX 6.5.0SP1 中,这个问题似乎得到了修复。

于 2015-05-29T16:59:05.663 回答