由于 Windows DLL 问题,C++ 程序无法运行

问题描述 投票:0回答:1

此代码将在您的计算机上运行,但不能在我的计算机上运行:

#include <iostream>
#include <vector>

using namespace std;

int main(){

    vector<int> vv;

    vv.push_back(1); //<--- without this, everything works

    cout << "X\n";

    return 0;
}

原因是,我的Windows机器似乎缺少(或有冲突)与矢量相关的特定DLL,如果我使用矢量,这会导致我的其他项目崩溃而没有报告。

不过,更有趣的是:

  1. 如果我评论推回线,它会正常执行而不会崩溃。
  2. 其他程序只要避免向量,就可以完全正常工作,例如使用列表或数组。

GDB 报告“启动期间程序退出,代码为 0xc0000139。”这意味着它找不到它想要的 dll。使用 Dependency Walker 查看我的可执行文件的依赖关系相当不确定,我无法判断 dll 中错误地缺少什么以及通常缺少什么。

也可能有第二个 dll 与之冲突(就像我下载了两个不同的编译器)。使用 Process Monitor 进行调查后发现,该进程没有使用位于 MSYS2 文件夹中的 MinGw64 文件,而是使用了我的 ProgramFiles/Git/mingw64/bin 位置中的 dll。

所以这可能是一个问题?但进程监视器没有告诉我为什么或是什么导致进程退出失败......

如何让 Windows 使用 MSYS2 中的 dll 而不是 Git 位置?我上面链接的帖子所说的解决方案是删除“错误的 dll”。但我不能只删除 git 使用的 dll?

另外,我如何保证切换到 MSYS2 中的 dll 能够解决我的问题?我只想使用矢量哈哈,这有多难?

其他解决方案包括离开这个间谍软件猖獗的操作系统并进入 Linux 世界,但这是一个巨大的变化。

c++ windows dll
1个回答
0
投票

我通过首先使用MSYS2更新mingw64,然后将冲突的dll复制到

git/mingw64
解决了这个问题。这工作了一段时间,但手动很麻烦。

实际问题是我的“Git for Windows”已经过时了。由于它已更新,并且已启用自动更新,因此我不必在任何地方复制任何 dll。

© www.soinside.com 2019 - 2024. All rights reserved.