【问题标题】:Procedure Entry Point error on simple c++ program简单 c++ 程序上的过程入口点错误
【发布时间】:2023-03-23 08:35:01
【问题描述】:

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

(我的电脑是葡萄牙语,我很抱歉。上面的消息翻译为“无法在动态链接库 [已编译的可执行文件的名称] 中找到过程 [过程名称]”。此特定错误消息显示在我做的一个头文件生成工具,是一个.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)。任何更复杂的东西都会崩溃。这是我在出现错误的地方编写的最简单的代码:https://hastebin.com/aqamidoxom.cpp

【问题讨论】:

  • 重新安装mingw。可能缺少某些运行时。
  • 通常与 VS 或 Redistributables 无关。尝试找到 msvcrt.dll 并将其复制到您的源目录。
  • 源目录到底在哪里?我也试过重新安装,没有用。
  • 你的源码所在的目录。在哪里编译和链接源代码。在“制作”一个复杂的项目之前先做一个简单的测试运行。如果您无法执行 Hello World 程序,那么您的编译器系统就会损坏。
  • 一个 hello world 程序有效,但另一个涉及指针的简单程序却没有。我将代码添加到主要问题正文中。另外,我在源目录中添加了 msvcrt,dll 还是不行。

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


【解决方案1】:

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

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

当您静态链接标准库时,您会回避这一点,因为现在 所有内容 都已被烘焙到您的可执行文件中。

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

进一步阅读:

【讨论】:

  • 但是既然它在MinGW运行时DLL中,它不应该在我设置了MinGW的电脑上运行吗?
  • @Carmo “已经设置了 MinGW”过于简单化了 :) MinGW 有很多组件。执行它所构建的程序所需的 DLL 是该生态系统的一部分。我不记得它们是否作为 build 环境的一部分自动放在 PATH 上 - 我个人认为是的,但似乎没有。无论哪种方式,您总是需要将这些 DLL 与您的可执行文件一起分发,因为并非所有用户都会安装任何 MinGW。正如您所发现的那样,或者静态链接它们。
  • @Carmo:我不知道正常的 MinGW 分布。也许卸载并尝试这个:nuwen.net/mingw.html 通常,这里的 Mingw 也不是什么大问题。我猜有些东西不见了。
  • 我唯一想了解的是为什么代码在我的笔记本电脑上运行正常。上面的 MinGW 安装没有什么不同或任何东西
  • @Carmo Only C:\MinGW? bin 目录呢?你在关注the instructions吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多