此代码将在您的计算机上运行,但不能在我的计算机上运行:
#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,如果我使用矢量,这会导致我的其他项目崩溃而没有报告。
不过,更有趣的是:
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 世界,但这是一个巨大的变化。
我通过首先使用MSYS2更新mingw64,然后将冲突的dll复制到
git/mingw64
解决了这个问题。这工作了一段时间,但手动很麻烦。
实际问题是我的“Git for Windows”已经过时了。由于它已更新,并且已启用自动更新,因此我不必在任何地方复制任何 dll。