【问题标题】:QNX runtime error: unknown symbol __stack_chk_guardQNX 运行时错误:未知符号 __stack_chk_guard
【发布时间】:2015-05-29 16:56:31
【问题描述】:

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

未知符号:__stack_chk_guard

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

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


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

【问题讨论】:

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


    【解决方案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 上运行时可能会遇到一个问题 [one], 是所有东西都是用-fstack-protector构建的,它依赖于 libc 中的支持。这不在 6.5.0 libc 中,而是在 IIRC、6.5.0SP1 中添加。

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

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2015-03-15
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多