【问题标题】:Segmentation fault on using Intel C Compiler on Linux with libstdc++在带有 libstdc++ 的 Linux 上使用 Intel C 编译器时出现分段错误
【发布时间】: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


【解决方案1】:

这可能是产品兼容性问题。您是否查看过发行说明以了解 CentOS 6.4 是否支持 Intel 编译器版本?我查看了编译器版本 13.x 发行说明,支持的 RHEL 版本是 4!您可能还想尝试安装英特尔产品的最新更新并在英特尔软件支持论坛上发帖。

【讨论】:

  • 有趣的是,我使用的是英特尔编译器发行版中的 libstdc++。我用ldd ./test 输出指出了这一点。现在我正在尝试了解 CentOS 版本是否会影响兼容性。
  • 是的,我也注意到了,但是替换 stdc++ 仍然会与其他各种系统库交互——比如 libc 和系统链接器——所以总是有可能出错! (我也是根据以前使用英特尔编译器的经验说话的,顺便说一句:))
  • 降级到 GCC 4.4(标准到 CentOS 6.4)后,我不再重现此错误
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2023-03-16
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多