简单 C++ 程序上的过程入口点错误
Procedure Entry Point error on simple c++ program
最近,我听从了老师的建议,决定尝试一下C++。我下载了 MinGW 并开始使用 g++ 编译一些简单的代码,但过了一段时间后,无论我如何尝试,我编译的任何程序都不会 运行。我总是遇到类似这样的错误:
(我的电脑是葡萄牙语,抱歉。上面的消息翻译成 "The procedure [name of procedure] could not be located in the dynamic link library [name of compiled executable]"。这个特定的错误消息出现在我制作的 header 生成器工具上,它是一个 .cpp文件。我编译的其他程序在执行时总是显示"Procedure entry point"错误)
我正在使用命令 g++ -o <filename>.exe -g -Wall *.cpp
进行编译(用于调试和填充),并且我只安装了 mingw32-base-bin
和 mingw32-gcc-g++-bin
包。我发现编译代码实际 运行 的唯一方法是,如果我使用命令 g++ <file> -static-libstdc++ -static-libgcc
编译代码(即使使用更简单的程序也会导致可执行文件大小过大)或者如果我使用这样的工具作为Visual Studio 2019。我也尝试重新安装MinGW,但它也没有用。
因为我没有做比一些 class 练习更大的事情,所以我真的很希望能够编译我的代码而不必使用 heavy-duty 工具,例如 Visual Studio ,我也想知道为什么需要添加 -static-libstdc++
和 -static-libgcc
才能正常工作。
PS.: 另一件需要注意的事情是,在我全新的笔记本电脑(具有相同的 MinGW 配置)上编译工作正常。我和我的老师谈过这个,他认为 Microsoft C++ Redistributables(从工具和游戏之类的东西安装)可能与 MinGW 提供的标准 C++ 库冲突。不过,他对此并不确定。
PS-2.: 看起来非常简单的代码就可以工作(比如 Hello World)。任何更复杂的东西都会分裂。这是我在出现错误的地方制作的最简单的代码:https://hastebin.com/aqamidoxom.cpp
一些标准库功能是 "header-only",因此它们被嵌入到您的可执行文件中。
其他的更复杂,存在于 MinGW "runtime" DLL 中,您必须将其与可执行文件一起提供。通常只需将它放在与您的可执行文件相同的目录中,或者将它放在您 PC 的某个位置 %PATH
,就足够了。
当您静态地 link 标准库时,您就回避了它,因为现在 它的所有内容 都被烘焙到您的可执行文件中。
这与 Visual Studio 或其 DLL 完全无关。 (除了 MinGW DLL 之外,您 将 使用 mcvcrt.dll
,但是 that is not to do with Visual Studio 它始终在 Windows 上可用。)
进一步阅读:
- MinGW .exe requires a few gcc dll's regardless of the code?
最近,我听从了老师的建议,决定尝试一下C++。我下载了 MinGW 并开始使用 g++ 编译一些简单的代码,但过了一段时间后,无论我如何尝试,我编译的任何程序都不会 运行。我总是遇到类似这样的错误:
(我的电脑是葡萄牙语,抱歉。上面的消息翻译成 "The procedure [name of procedure] could not be located in the dynamic link library [name of compiled executable]"。这个特定的错误消息出现在我制作的 header 生成器工具上,它是一个 .cpp文件。我编译的其他程序在执行时总是显示"Procedure entry point"错误)
我正在使用命令 g++ -o <filename>.exe -g -Wall *.cpp
进行编译(用于调试和填充),并且我只安装了 mingw32-base-bin
和 mingw32-gcc-g++-bin
包。我发现编译代码实际 运行 的唯一方法是,如果我使用命令 g++ <file> -static-libstdc++ -static-libgcc
编译代码(即使使用更简单的程序也会导致可执行文件大小过大)或者如果我使用这样的工具作为Visual Studio 2019。我也尝试重新安装MinGW,但它也没有用。
因为我没有做比一些 class 练习更大的事情,所以我真的很希望能够编译我的代码而不必使用 heavy-duty 工具,例如 Visual Studio ,我也想知道为什么需要添加 -static-libstdc++
和 -static-libgcc
才能正常工作。
PS.: 另一件需要注意的事情是,在我全新的笔记本电脑(具有相同的 MinGW 配置)上编译工作正常。我和我的老师谈过这个,他认为 Microsoft C++ Redistributables(从工具和游戏之类的东西安装)可能与 MinGW 提供的标准 C++ 库冲突。不过,他对此并不确定。
PS-2.: 看起来非常简单的代码就可以工作(比如 Hello World)。任何更复杂的东西都会分裂。这是我在出现错误的地方制作的最简单的代码:https://hastebin.com/aqamidoxom.cpp
一些标准库功能是 "header-only",因此它们被嵌入到您的可执行文件中。
其他的更复杂,存在于 MinGW "runtime" DLL 中,您必须将其与可执行文件一起提供。通常只需将它放在与您的可执行文件相同的目录中,或者将它放在您 PC 的某个位置 %PATH
,就足够了。
当您静态地 link 标准库时,您就回避了它,因为现在 它的所有内容 都被烘焙到您的可执行文件中。
这与 Visual Studio 或其 DLL 完全无关。 (除了 MinGW DLL 之外,您 将 使用 mcvcrt.dll
,但是 that is not to do with Visual Studio 它始终在 Windows 上可用。)
进一步阅读:
- MinGW .exe requires a few gcc dll's regardless of the code?