C++基本程序分段错误

dar*_*ark 6 c++ g++ segmentation-fault

这是我的CPP计划

#include <iostream>

int main(int argc, char *argv[]){
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并执行此操作会导致seg错误:

[18:08 ~] > g++ test.cpp
[18:09 ~] > ./a.out
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

有没有人对这个问题有所了解吗?非常感谢你的帮助.

以下是一些可能有用的细节:

[18:13 ~] > ldd a.out
 linux-vdso.so.1 =>  (0x00007fff3fdff000)
 libstdc++.so.6 => /usr/lib/gcc/x86_64-redhat-linux/3.4.6/libstdc++.so.6 (0x00007fc8f4a53000)
 libm.so.6 => /lib64/libm.so.6 (0x00007fc8f47ce000)
 libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc8f45b8000)
 libc.so.6 => /lib64/libc.so.6 (0x00007fc8f4225000)
 /lib64/ld-linux-x86-64.so.2 (0x00007fc8f4ca5000)
Run Code Online (Sandbox Code Playgroud)

还有gdb:

[18:15 ~] > gdb ./a.out
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from ...done.
(gdb) run
Starting program: a.out

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bd48ec in std::ios_base::Init::Init() () from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/libstdc++.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.x86_64 libgcc-4.4.7-3.el6.x86_64
(gdb) bt
#0  0x00007ffff7bd48ec in std::ios_base::Init::Init() () from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/libstdc++.so.6
#1  0x0000000000400831 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/iostream:77
#2  0x0000000000400873 in global constructors keyed to main() () at test.cpp:7
#3  0x0000000000400976 in __do_global_ctors_aux ()
#4  0x00000000004005a3 in _init ()
#5  0x00007fffffffe448 in ?? ()
#6  0x0000000000400905 in __libc_csu_init ()
#7  0x00007ffff7385c70 in __libc_start_main () from /lib64/libc.so.6
#8  0x0000000000400659 in _start ()
(gdb)
Run Code Online (Sandbox Code Playgroud)

克++

[10:14 ~] > g++ -v
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,f77 --disable-libgcj --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-19.el6)
Run Code Online (Sandbox Code Playgroud)

最后一件事

[10:25 ~] > ls /usr/lib/gcc/x86_64-redhat-linux
3.4.6
Run Code Online (Sandbox Code Playgroud)

谢谢.

Rus*_*eed 3

所以显然你的问题是你的 g++ 安装已损坏。我从消息中看到您有 RHEL6,但不知何故有 libstdc++ 版本 3.4.6。

我的RHEL6系统有gcc、libstdc++等版本4.4.6。我认为这个旧版本的libstdc++与你的问题有关。

您安装了哪些版本的 gcc、g++ 和 libstdc++?从其他消息来看,您似乎有4.4.7,但您是否碰巧有多个版本或混合版本?

rpm -q gcc g++ libstdc++
Run Code Online (Sandbox Code Playgroud)

另外,/usr/lib/gcc/x86_64-redhat-linux 下还有哪些其他目录?

ls /usr/lib/gcc/x86_64-redhat-linux
Run Code Online (Sandbox Code Playgroud)