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
也就是编译时将-g改为
参考:http://stackoverflow.com/questions/18407563/gcc-doesnt-produce-line-number-information-even-with-g-option
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
相关文章推荐
- mac下配置安装vagrant
- 【Linux系统安装】之Centos 6.5包组安装建议
- 【Linux系统安装】之Centos 6.5包组安装建议
- python 3 最简单的小爬虫
- JMenu的使用
- inux中fork()函数详解(原创!!实例讲解)
- 开启物联网时代
- ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
- 分布式日志收集系统:Flume
- Java 线程池
- 给VB.NET开发者的46个忠告(转)
- 深入学习页面优化之页面渲染原理
- 世界十大名车
- 万圣节派对(水题)
- 【驱动】——模块参数
- Linux C线程的创建和使用
- WCF Stream正确应用指南
- 读浅墨博客 十二 笔记
- 如何定位Obj-C野指针随机Crash(一):先提高野指针Crash率
- cocos2dx3.3 C++和Android的网络连接状态