c++ - 简单 C++ 程序上的过程入口点错误

标签 c++ g++ runtime-error mingw entry-point

最近,我听从了老师的建议,决定尝试涉足C++。我下载了 MinGW 并开始使用 g++ 编译一些简单的代码,但过了一段时间后,无论我尝试了多少,我编译的任何程序都无法运行。我总是遇到类似这样的错误:

Error message in portuguese

(我的电脑是葡萄牙语,我很抱歉。上面的消息翻译为“无法在动态链接库[已编译可执行文件的名称]中找到过程[过程名称]”。这个特定的错误消息显示在我做的一个header generator工具,是一个.cpp文件。我编译的其他程序在执行时总是显示“Procedure entry point”错误)

我正在使用命令 g++ -o <filename>.exe -g -Wall *.cpp 进行编译(调试和填充),我只有 mingw32-base-binmingw32-gcc-g++-bin安装包。我发现编译代码实际运行的唯一方法是使用命令 g++ <file> -static-libstdc++ -static-libgcc 编译代码(即使使用更简单的程序也会导致可执行文件体积膨胀)或者如果我使用 Visual Studio 2019 等工具。我也尝试重新安装 MinGW,但它也没有用。

因为我没有做比一些类练习更大的事情,我真的很想能够编译我的代码而不必使用像 Visual Studio 这样的重型工具,我也想知道为什么它有必要添加 -static-libstdc++-static-libgcc使其正常工作。

PS.:另一件需要注意的事情是,在我全新的笔记本电脑(具有相同的 MinGW 配置)上编译工作正常。我和我的老师谈过这个,他认为 Microsoft C++ Redistributables(从工具和游戏之类的东西安装)可能与 MinGW 提供的标准 C++ 库冲突。不过,他并不确定这一点。

PS-2.: 看起来非常简单的代码就可以工作(比如 Hello World)。任何更复杂的东西都会 split 。这是我在出现错误的地方编写的最简单的代码:https://hastebin.com/aqamidoxom.cpp

最佳答案

一些标准库功能是“仅限 header ”的,因此它们被嵌入到您的可执行文件中。

其他的更复杂,存在于 MinGW“运行时”DLL 中,您必须将其与可执行文件一起提供。通常只需将它放在与您的可执行文件相同的目录中,或者将它放在您 PC 的 %PATH 中的某个位置就足够了。

当您静态链接标准库时,您就回避了它,因为现在它的一切都被烘焙到您的可执行文件中。

这与 Visual Studio 或其 DLL 完全无关。 (除了 MinGW DLL 之外,您使用 mcvcrt.dll,但 that is not to do with Visual Studio 并且它在 Windows 上始终可用。)

进一步阅读:

关于c++ - 简单 C++ 程序上的过程入口点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097812/

相关文章:

c++ - 尝试输入十六进制值时,程序在 scanf ("%x",&foo) 上崩溃

c++ - 将 QUrl 传递给 QNetworkRequest 构造函数会导致 "non-class type"编译器错误

c++ - 除了共享库之外,g++ -fPIC 是否也适用于可执行文件?

java - 线程 "main"java.util.InputMismatchException 使用 Double 时出现异常

java - Sams 《24 小时自学 Java》第 6 版。第一章20 ConfigWriter.java错误

c++ - 我如何有效地在元素之前和之后搜索关键短语

c++ - 在 av_frame_get_buffer 之后清理

java - 无法合并 Dex 错误 : Android Studio 3. 0

c++ - 简单的 boost ASIO https 不返回正文

c++ - 我怎样才能用 GNU g++ 只编译标准 C++?