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這個問題似乎是固定的。

相關問題