【问题标题】:Mingw and c++ vectors [duplicate]Mingw 和 C++ 向量
【发布时间】:2019-01-28 20:21:59
【问题描述】:

我正在用 C++ 编写一个简单的小程序来测试向量。以下代码运行良好,并将 hello 输出到 cmd。 我遵循的步骤是: g++ 文件名.cpp 进行编译 .\a.exe 运行

#include <iostream>
#include <vector>
using namespace std;

int main()
{

    cout<<"hello";
    return 0;
}

但是,当我声明一个向量时,hello 没有显示,程序似乎根本不工作。

#include <iostream>
#include <vector>
using namespace std;

vector<int> a;

int main()
{

    cout<<"hello";
    return 0;
}

编译时我没有收到任何错误消息。但是当我在 cmd 之外运行时,我确实收到了一条关于没有入口点的消息。

程序入口点_ZNKSt9baisc_ioslcSt11char_traitslcEEcvbEv 在动态链接库中找不到

我在谷歌上搜索和堆栈溢出,但找不到解决我的问题的方法。

对于稍后会阅读此内容的任何人,我在环境路径变量中安装并定义了一个名为 gtk 的东西,它似乎与 MinGW 发生冲突。一切通过写作顺利进行:

g++ ex1.cpp -static-libgcc -static -static-libstdc++

【问题讨论】:

  • 无法复制:ideone.com/itiV9Q
  • 使用mingw复制
  • @SaraKat 我严重怀疑是否可以通过正确的 MinGW 安装来重现该问题。您在编译程序时是否收到任何错误消息?
  • 编译时没有收到任何错误消息。但是当我在 cmd 之外运行时,我确实收到了一条关于没有入口点的消息
  • 在动态链接库中找不到过程入口点_ZNKSt9baisc_ioslcSt11char_traitslcEEcvbEv

标签: c++ mingw


【解决方案1】:

此问题可能是由于 Windows 在尝试执行您的程序时未找到包含程序尝试访问的函数(此处为_ZNKSt9baisc_ioslcSt11char_traitslcEEcvbEv)的 DLL。

有几个解决方案:

  • 与 C++ 库的静态链接 (--static-libstdc++)(这会将 C++ 库直接链接到您的可执行文件中(这可能会使您的程序更大))
  • 将 libstdc++ dll 放入您的程序文件夹中(您应该能够在编译器安装文件夹中的某个位置找到它)
  • 将 libstdc++ dll 的路径添加到全局 PATH 变量中(如果您想了解有关添加到 PATH 的更多信息,请参阅here),以便为您计算机上运行的任何可执行文件找到该 dll

执行任何这些操作都应该可以解决您的问题。

【讨论】:

  • 将 dll 放入程序文件夹中 避免这样做。恶意行为者替换 dll 并将您的计算机同化到 Borg 比使用正确安装的 DLL 更容易。
  • 将 libstdc++ dll 放入您的程序文件夹中:我之前尝试过,但还是不行
  • 这虽然可行,但为什么呢?与 C++ 库的静态链接 (--static-libstdc++)
  • ok 我发现这个库有 2 个版本:C:\Program Files (x86)\GtkSharp\2.12\bin\libstdc++-6.dll D:\MinGW\bin\libstdc++-6 .dll 其中一个可能是因为我认为 Unity 的单一开发而存在
  • @SaraKat 可以做到。 Welcome to DLL Hell
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多