免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3327 | 回复: 9

匿名namespace导致g++编译core dump [复制链接]

论坛徽章:
0
发表于 2008-11-19 20:10 |显示全部楼层
http://gcc.gnu.org/ml/gcc-bugs/2008-07/msg01669.html
遇到一模一样的问题,但由于我那个是嵌入式编译的,命令可能稍复杂,我就直接贴网上这个例子了,也是搜到的唯一一个

Compiling PositionEstimator.cpp with g++ (for coverage)
which g++
/usr/bin/g++
g++  --version
g++ (GCC) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++  -Wall -Wextra -g -O0 -I ../Astro -I
/home/sam/dnp/External/tools/boost_1_35_0 -I ../DNPStack -I
../External/TrackerLib -I ../External/TrackerLib/leastsquares -I
../External/quat -I includes -I ../ETracker -pg -fprofile-arcs -ftest-coverage
-D PSI_CYGWIN -fprofile-arcs -ftest-coverage -c PositionEstimator.cpp -MD -o
Linux_i686/PositionEstimator.o -save-temps
PositionEstimator.cpp: In function ?(static initializers for
PositionEstimator.cpp)?:

PositionEstimator.cpp:47: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-4.1/README.Bugs>.
Preprocessed source stored into /tmp/ccWZm8Cl.out file, please attach this to
your bugreport.

里面加了profiling支持,也就是gcov工具选项.下面任一种改动都可以解决问题:
1. 去掉-g选项
2. 源文件里的匿名namespace改成有名的
3. 源文件里加上一些没什么用的代码,或是注释掉某些行
4. 去掉gcov相关选项.
5.换成本地x86的g++编译成本机版本

以上都不可行,因为gcov跟-g是一定要的,这样的文件有很多,暂时不想每个文件都改namespace.
BTW,用匿名namespace是在用UnitTest++写test case的时候避免名字冲突用的.

请问各位有见过这个问题吗?有何解决方案不?

论坛徽章:
0
发表于 2008-11-19 21:04 |显示全部楼层
用gtest测试

论坛徽章:
0
发表于 2008-11-19 21:10 |显示全部楼层
原帖由 cofish 于 2008-11-19 21:04 发表
用gtest测试

test case早就写好了,而且比较海量, 不过是现在才加gcov,改不现实

论坛徽章:
0
发表于 2008-11-19 21:13 |显示全部楼层
PositionEstimator.cpp: In function ?(static initializers for
PositionEstimator.cpp)?:

这个啥意思?

论坛徽章:
0
发表于 2008-11-19 21:16 |显示全部楼层
原帖由 cofish 于 2008-11-19 21:13 发表
PositionEstimator.cpp: In function ?(static initializers for
PositionEstimator.cpp)?:

这个啥意思?

就是搞不懂,它报的那行是文件最后一个空行

好像是匿名namespace被当作static处理的时候出的错,namespace里定义的所有变量都自动成为本文件的static变量. 网上查的.

可惜用的那个编译器暂时没源代码,用strace或gdb也得不到任何有用符号信息,现在正在想办法换一个g++试试.

论坛徽章:
0
发表于 2008-11-19 21:20 |显示全部楼层
好像是static初始化的地方
看看是不是没有初始化?

具体我也不清楚了。

论坛徽章:
0
发表于 2008-11-19 21:23 |显示全部楼层
原帖由 cofish 于 2008-11-19 21:20 发表
好像是static初始化的地方
看看是不是没有初始化?

具体我也不清楚了。

没有任何显示的static变量,就是namespace的大括号时有变量的定义罢了,比如ClassA a;

比较诡异的问题.今天搞不定的话,我就只能找人要编译器源代码看能不能看出什么了

论坛徽章:
0
发表于 2008-11-19 21:29 |显示全部楼层
原帖由 galaxywar 于 2008-11-19 21:23 发表

没有任何显示的static变量,就是namespace的大括号时有变量的定义罢了,比如ClassA a;

比较诡异的问题.今天搞不定的话,我就只能找人要编译器源代码看能不能看出什么了



如果没有static变量,并且没有初始化,那就不知道了。

论坛徽章:
0
发表于 2008-11-19 23:01 |显示全部楼层

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2008-11-19 23:30 |显示全部楼层
小白了...

[ 本帖最后由 koolcoy 于 2008-11-19 23:37 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP