【发布时间】:2013-06-20 14:36:36
【问题描述】:
我已经安装了 Intel Composer 2013 并尝试构建最简单的 C++ 应用程序
#include <iostream>
int main() {
std::cout << "test" << std::endl;
}
与
$ icc -v
icc version 12.1.2 (gcc version 4.7.0 compatibility)
启动程序后出现分段错误:
(gdb) run
Starting program: /home/paceholder/work/test/test
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7911bb1 in std::ostream::sentry::sentry(std::ostream&) () from
/opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime
/libstdc++.so.6
Missing separate debuginfos, use: debuginfo-install
glibc-2.14.1-14.12.5.x86_64 intel-sourcechecker-common-183-13.1-4.noarch
(gdb) backtrace
#0 0x00007ffff7911bb1 in std::ostream::sentry::sentry(std::ostream&) ()
from /opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime
/libstdc++.so.6
#1 0x00007ffff79134a6 in std::basic_ostream<char, std::char_traits<char> >&
std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) ()
from /opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime/libstdc++.so.6
#2 0x00007ffff791379f in std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) ()
from /opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime/libstdc++.so.6
#3 0x0000000000400987 in main ()
ldd 给出:
$ ldd ./test
linux-vdso.so.1 => (0x00007fff1f52f000)
libm.so.6 => /lib64/libm.so.6 (0x00007f514de01000)
libstdc++.so.6 => /opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime/libstdc++.so.6 (0x00007f514daf5000)
libgcc_s.so.1 => /opt/intel/composer_xe_2013.4.183/bin/sourcechecker/lib/intel64/pinruntime/libgcc_s.so.1 (0x00007f514d8dd000)
libc.so.6 => /lib64/libc.so.6 (0x00007f514d54e000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f514d34a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f514e058000)
系统使用CentOS 6.4,64位
出现此类错误的原因可能是什么以及如何解决?
【问题讨论】:
-
段错误来自试图访问数据类型/程序本身无法访问的内存。如果编译成功,运行时出现这个错误,检查输出程序的权限,确保有+x。
-
如果我没有权限,Linux 不允许我启动程序。在我的情况下,它开始,然后在我使用
std::cout的那一行上下降。我确实有 +x 。
标签: linux segmentation-fault libstdc++ icc