GDB No symbol "XXXXX" in current context
這幾天在把windows下的工程移植到centOS下的時候,發現gcc編譯不過,有三點原因:
1、gcc相比VS,對C++標準的遵循更為嚴格,有些不符合標準的寫法在VS下能過,但在gcc下則報錯。比如:在標頭檔案中宣告類A的成員函式時,gcc下不能帶有A::,又如初始化fstream時,gcc下第一個引數必須是const char *,而不能是string等等;
2、由於centOS已有的gcc4.4.7版本太低,一些C++11中的用法不支援;
3、同樣由於gcc版本太低,幾個開源的專案的靜態庫無法編譯。
第1、2兩點還好解決,但對於第三點總不能大改人家的開源專案,所以更新gcc到4.8.1,編譯通過,生成了可執行檔案。但坑爹的事情發生了,用gdb除錯的時候,總是報錯No symbol "XXXXX" in current context。
反覆檢查cmake裡面設定了-g選項,說明gcc編譯後產生了符號表,但為什麼gdb總說找不到符號呢。百度、csdn沒有一個答案有用,最後在stackoverflow上找到了原因:gcc升級後,gdb沒有升級,新版本gcc產生的符號表低版本的gdb不認識,所以找不到符號。
解決方法有兩個:
1、更新gdb;
2、GCC-4.8 defaults to using dwarf4 (gcc.gnu.org/gcc-4.8/changes.html), but GDB is too old to understand that. Build with
-gdwarf-2
, it will work!
也就是編譯時將-g改為-gdwarf-2
參考:http://stackoverflow.com/questions/18407563/gcc-doesnt-produce-line-number-information-even-with-g-option