【问题标题】:C++ Procedure Entry Point Not Found with MinGW使用 MinGW 未找到 C++ 过程入口点
【发布时间】:2018-07-08 09:52:55
【问题描述】:

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • -static-libgcc -static-libstdc++ 添加到您的编译器标志中。
  • 谢谢!你能解释一下刚刚做了什么吗?
  • 这些标志使 GCC 静态链接标准库(分别用于 C 和 C++)而不是动态链接。 IE。 .dlls 中的内容现在位于 .exe 中(它的大小可能增长了几兆字节)。
  • 哦,好吧!再次谢谢你!有什么办法可以避免每次都静态链接吗?
  • 否,除非您想将.dlls 复制到您的.exe 所在的文件夹中。我假设你是从命令行编译的,所以我建议你找一个合适的 IDE。那么你就不会关心你的标志列表有多长了。

标签: c++ mingw libstdc++


【解决方案1】:

使用 MinGW 构建时,生成的二进制文件将需要 libstdc++-6.dll(以及其他一些,例如 libwinpthread-1.dll)。它们包含标准 C++ 库,例如 std::string 和朋友。

在执行时,您的二进制文件将在特定位置查找这些 DLL。通常错误是关于缺少 DLL,但在您的情况下,这些 DLL 的错误版本似乎在您不知情的情况下安装在您计算机上的某个位置。 (例如 32 位与 64 位)

有两种可能的解决方案:

  • 找到您的 MinGW 工具链附带的正确的 DLL,并将它们放在本地目录中。 (本地目录是可执行文件搜索 DLL 的第一个位置。)您必须将它们的副本与您的构建一起提供。
  • 通过将-static-libgcc -static-libstdc++ 传递给链接器,链接标准 C++ 库静态到您的程序。这将增加二进制文件的大小,并且每个二进制文件都将包含相同例程的冗余副本。但是,您将获得一个独立的二进制文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多