您的位置:首页 > 其它

GDB No symbol "XXXXX" in current context

2015-05-30 18:42 253 查看
这几天在把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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: