【问题标题】:gcc with linker option e gets segmentation fault带有链接器选项 e 的 gcc 出现分段错误
【发布时间】:2015-12-20 10:38:42
【问题描述】:

这是我的程序:

void f(){
    printf("here\n");
}
void main(){
}

我用gcc -ef *.c 编译它。当我运行它时,它会给出以下输出:

here
Segmentation fault (core dumped)

回溯显示:

#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffdf9e in ?? ()
#2  0x0000000000000000 in ?? ()

这里有什么问题?

【问题讨论】:

  • 当您看到类似这样的无用回溯时,您应该将-g 添加到我们的编译器选项中,然后重试。
  • @JohnZwinck 我也试过 -g 。它显示了相同的回溯。您能提出更多建议吗?
  • 你正在用*.c编译当前目录中的所有个C文件。我们不知道您在这些文件中有什么。请发帖minimal reproducible example
  • @l3x 我正在编译目录中的唯一文件。您可以将 * 替换为 并给出相同的结果。我已经给出了最小的可验证代码。
  • 也许这会有所帮助? stackoverflow.com/questions/7494244/…

标签: c linux gcc segmentation-fault


【解决方案1】:

问题在于您正在更改可执行文件的默认入口点,通常是_start_start 为您做了一些事情:设置 C 运行时环境,获取 argv,并调用 libc_start_main,当main() 返回时,libc_start_main 将使用exit() 退出进程(以及许多其他事情)。您的程序需要调用 exit() 才能正确退出进程...否则,您将无处可去。

仅供参考,您可以在 glibc here 中找到 exit() 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多