GDB No symbol "XXXXX" in current context

来源:互联网 发布:java获取每个月的天数 编辑:程序博客网 时间:2024/06/01 09:20

这几天在把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

0 0