使用 MinGW 找不到 C++ 过程入口点

标签 c++ mingw libstdc++

我刚开始学习 C++ 类(class),正在使用 MinGW 进行编译(我开始做 K&R,所以已经为 C 设置了它)。每当我编译包含或使用任何库的文件时,都会出现以下错误:

“过程入口点......(这只是一个看起来很长的乱码)无法位于动态链接库中......(我正在编译的文件的路径)”

在谷歌搜索之后,我尝试将 libstdc++-6.dll 放在 C:\Windows\System32 中,将 C:\MinGW\bin 作为 PATH 中的第一优先级,并将 libstdc++-6.dll 放在与 .cpp 文件相同的文件夹中我正在编译。

唯一的解决方案是将它复制到我正在编译的 .cpp 文件的文件夹中,但我想避免以后每次都这样做。

在此先感谢您的帮助!

最佳答案

使用 MinGW 构建时,生成的二进制文件将需要 libstdc++-6.dll (还有一些像 libwinpthread-1.dll )。它们包含标准的 C++ 库,例如 std::string和 friend 。
执行后,您的二进制文件将在特定位置查找这些 DLL。通常错误是关于缺少 DLL,但在您的情况下,这些 DLL 的错误版本似乎在您不知情的情况下安装在您的计算机上。 (例如 32 位与 64 位)
有两种可能的解决方案:

  • 找到 正确的 DLL 随您的 MinGW 工具链一起提供并放置它们 在本地目录 . (本地目录是可执行文件搜索 DLL 的第一个位置。)您必须随构建一起提供它们的拷贝。
  • 友情链接 标准 C++ 库 静态 通过传递 -static-libgcc -static-libstdc++ 到您的程序到链接器。这将增加二进制文件的大小,并且每个二进制文件都将包含相同例程的冗余拷贝。但是,您将获得一个独立的二进制文件。
  • 关于使用 MinGW 找不到 C++ 过程入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505719/

    相关文章:

    c++ - 将 Windows 上的 LLVM 库与 CMake 和 MinGW 链接起来

    makefile - 使用 MinGW/MSYS 编译 OpenSSL 时出错

    gcc - MinGW 和常规 GCC 之间的区别?

    c++ - 运行在同一台机器上编译的程序时 GLIBCXX 版本错误

    c++ - Lua C API - 使用同名的变量和函数加载多个文件

    c++ - 64位部署

    c++ - 如何使用 libc++ istream_iterator 读取文件中的 0xFF?

    c++ - C++11 是否要求分配器是默认可构造的,libstdc++ 和 libc++ 不同意?

    c++ - C++ 类中公共(public)函数的地址

    c++ - 为什么我需要包含 <vector> 才能使用它们?