gpt4 book ai didi

C 程序编译没有错误但不会运行并且没有警告或错误

转载 作者:行者123 更新时间:2023-11-30 21:01:57 24 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




TL;DR 程序在一个系统上运行。在家庭系统上,它在到达主入口点之前挂起(用调试器检查)。

我有一个用于小组项目的本地代码存储库,同步到我在其他几台机器(包括 Linux、Windows 和 Macs)上测试过的最新版本,我确信它们可以正常工作而不会出现任何令人讨厌的错误。这是一个相当简单的程序,我们处理的主要技术挑战是在 SDL2 中进行链接,这相当容易。

该程序在我的本地机器上完美编译,即使打开了尽可能多的警告标志,也不会引发任何警告或错误。我确保我不会意外使用来自不同系统的 .o 文件,并且我已经清理并重新编译了几次代码。我已经将我的本地存储库恢复为项目中的旧代码,我也确信这些代码之前已编译并在我的本地计算机上运行。

我确保 gcc 中外部库的链接工作正常,并且没有警告或错误由此而来。 .o 文件的最终链接也没有错误和警告。

我已经为我正在工作的程序重新安装了所有相关的 .DLL(在这种情况下,唯一的 DLL 是 SDL),包括在逻辑系统位置和已编译可执行文件的工作目录中。我确保 .DLL 是正确的位版本,甚至尝试了错误的位版本,以防我不小心制作了需要其他位版本的版本。

我已经重新安装了我的编译器(我目前从 Msys2 获得),并且我尝试使用来自 Mingw64 的编译器。

这些事情都没有任何区别。当我去运行可执行文件时,什么都不会发生。没有创建任何进程,并且我从中运行它的任何终端窗口都会挂起,直到我强制关闭它(它不会响应 ctrl-c)。

如果我尝试在 Debug模式下运行它,gdb 将能够打开可执行文件,并为我提供所有信息,但是一旦我尝试运行它,它就会像终端窗口一样挂起。即使我尝试在入口点破坏它,程序似乎也永远无法到达入口点,因为它仍然挂起。

这个问题完全是随机开始的。我从大学回家,那天我上大学之前一直在编写代码,并将它留在可编译状态,回到家,点击 make 并且它无法运行。这甚至是在我取消我们当天提交并推送的更改之前,这就是为什么我完全不知道为什么它会如此愉快地编译但绝对拒绝在任何条件下运行。

最佳答案

如果调试器没有到达主入口点,那么我能想到的最有可能的罪魁祸首是 static initialization fiasco ,这与您描述的行为一致:在一个系统上工作,在另一个系统上失败。

没有看到任何代码,我们只是在黑暗中扔箭。

C 与 C++:

静态初始化惨败仅适用于 C++,但请记住,库,甚至链接到 C 程序的库都可以包含 C++ 代码(不一定公开为接口(interface))。

请务必查看Is there any way a C/C++ program can crash before main()? .

@JohnBollinger 有一个很好的评论:检查一个简单的程序(使用相同的编译器和标志编译)是否运行。我们有时会专注于我们认为问题所在,我们很容易错过这样的事情。

您可以做的另一件事是使用 ldd查看是否将正确的库链接到您的程序。

关于C 程序编译没有错误但不会运行并且没有警告或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com