我正在尝试测试 QNX 6.6.0 和 6.5.0 之间的向后兼容性(鉴于我之前遇到的问题)。我使用 SDP6.6.0 编译了一个相对简单的程序,并在 Neutrino 6.5.0 上执行。当我执行程序时,会弹出以下运行时错误:
未知符号:__stack_chk_guard
ldd:FATAL: 无法解析所有符号
这是什么原因造成的?...
(我找到了解决方案,但它没有立即工作。当我开始写这个问题时,我意识到我犯的错误。为了将来的参考,我将在此处作为问答提供解决方案)。
我正在尝试测试 QNX 6.6.0 和 6.5.0 之间的向后兼容性(鉴于我之前遇到的问题)。我使用 SDP6.6.0 编译了一个相对简单的程序,并在 Neutrino 6.5.0 上执行。当我执行程序时,会弹出以下运行时错误:
未知符号:__stack_chk_guard
ldd:FATAL: 无法解析所有符号
这是什么原因造成的?...
(我找到了解决方案,但它没有立即工作。当我开始写这个问题时,我意识到我犯的错误。为了将来的参考,我将在此处作为问答提供解决方案)。
由于 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 中,这个问题似乎得到了修复。