为什么我会出现分段错误?

发布于 2024-08-19 05:54:38 字数 301 浏览 5 评论 0原文

我正在尝试用 C++ 编译一个简单的 hello world 函数。编译后,运行它并得到“分段错误”。有人可以解释一下吗?

我使用以下命令从 Linux 命令行编译此文件:

g++ 你好.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

I am trying to compile a simple hello world function in c++. After I compile it, I run it and get "Segmentation fault". Can someone shed some light on this?

I am compiling this from a Linux command line using the following command:

g++ hello.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

吾性傲以野 2024-08-26 05:54:38

程序本身看起来还不错。我猜想您的编译环境中有一些怪癖导致了段错误。

最好的办法是在调试器(gdb)中运行它——这会告诉你它在哪里崩溃,这将帮助你找出问题所在。

为此,请像这样编译:

g++ -g -o hello hello.cpp

然后运行 ​​gdb:

gdb hello

并在 gdb 提示符下键入

run

运行程序。当它崩溃时,输入

bt

它将给你一个堆栈跟踪,希望它能帮助你弄清楚发生了什么。

The program itself looks OK. I would guess there's some quirk in your compilation environment that is causing the segfault.

Your best bet is to run this in the debugger (gdb) -- that will tell you where it's crashing, which will help you figure out what the problem is.

To do this, compile like this:

g++ -g -o hello hello.cpp

then run gdb:

gdb hello

and at the gdb prompt type

run

to run the program. When it crashes, type

bt

which will give you a stacktrace that will -- hopefully -- help you figure out what's going on.

一袭白衣梦中忆 2024-08-26 05:54:38

该代码没有任何问题,因此您必须首先检查您的编译器,然后检查您的硬件。

There's nothing wrong with that code, so you will have to investigate first your compiler, then your hardware.

一杯敬自由 2024-08-26 05:54:38

编译它

像这样g++ -Bstatic -static hello.cpp

,然后运行 ​​./a.out

如果这没有出现段错误,那么 LD_LIBRARY_PATH 就是你的罪魁祸首。

Compile it like this

g++ -Bstatic -static hello.cpp

and then run ./a.out

If this doesn't seg fault, LD_LIBRARY_PATH is your culprit.

梦晓ヶ微光ヅ倾城 2024-08-26 05:54:38

这可能不太可能,但请尝试将 int main() 更改为 int main(int argc, char *argv[])

This might be a longshot, but try to change int main() to int main(int argc, char *argv[])

○闲身 2024-08-26 05:54:38

虽然已经晚了,但可能有用:

编译的一个简单的 cxx 程序会在核心转储/段错误的情况下运行,原因可能是:

  • gcc 安装损坏,.so 链接损坏(libstdc++.so ...)

这通常发生在 gcc 安装编译的情况下来源。

解决方法是通过 LD_LIBRARY_PATH 预加载正确的 lib64/ 文件夹:

LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64 ./hello
# Or
LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64/libstdc++.so ./hello

如果是这样,请将定义设置为系统范围:

sudo echo "LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64" >/etc/profile.d/your_gcc

然后重新启动。

It's late but might useful:

A simple cxx program compiled runs with core dump / segment fault, the reasons could be:

  • broken gcc installation, broken .so links (libstdc++.so ...)

This commonly happens in the gcc installation is compiled from source.

The workaround is preloading the right lib64/ folder via LD_LIBRARY_PATH:

LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64 ./hello
# Or
LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64/libstdc++.so ./hello

If so, put the definition as system wide:

sudo echo "LD_LIBRARY_PATH=YOUR_GCC_INSTALLATION/lib64" >/etc/profile.d/your_gcc

and reboot.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文