无法在 DLL(文件路径)中找到入口点(_ZSt28__throw_bad_array_new_lengthv)。

4

错误

确切的错误是问题的标题。 错误的图片

当我使用 vectorName.push_back() 函数时会发生这个错误。 我用以下简单的代码重新创建了它:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector <int> vec = {};
    vec.push_back(2);
    return 0;
}

编译器和设置信息

我正在使用msys2,并且 我是按照这个指南进行设置的。

我不知道这是否相关,但在此之前我使用过tdm-gcc。

研究

几乎找不到解决方法,或者我没有足够努力地搜索。我找到了一些关于_ZSt28__throw_bad_array_new_lengthv的帖子,但没有关于入口点的。因为我没有找到关于这个确切问题的任何信息,所以我没有尝试任何方法。


你是在编译程序时还是在运行程序时遇到这个错误? - Some programmer dude
经过快速搜索,似乎是因为安装的GCC编译器版本与GCC标准C ++安装之间可能存在不匹配。您安装了哪个版本的GCC?您尝试过安装不同版本的GCC吗? - Some programmer dude
C:\msys64\mingw64\bin移至PATH的顶部。如果这无法解决问题,请使用-static进行构建,或将程序使用的DLL文件复制到.exe旁边(使用ntldd -R 123.exe获取DLL列表,忽略那些不存在于C:\msys64\mingw64\bin中的文件)。 - HolyBlackCat
1
当我运行已编译的程序时出现了这种情况。版本是12.2.0。构建过程没有出现任何错误。我回到tdm-gcc,因为它仍然可以工作。 - Penzboti
由于我无法在MSYS2 shell中重现此问题,我猜测这可能是您的VSCode环境出了问题。如果您在MSYS2的MinGW 64位shell中运行g++ -Wall test.cpp && ./a.exe编译和运行代码,会发生什么情况?which g++的输出是什么? - David Grayson
@DavidGrayson 我猜在 msys2 shell 中它可以正常运行,但在 Windows 资源管理器中双击时可能会出错。 - Wolf
2个回答

7
问题: "动态链接库中无法定位过程入口点_zst28__throw_bad"
(使用msys2 mingw64)
解决方案: 修改系统环境变量(需要管理员权限)
以管理员身份启动Windows命令行(cmd.exe)。 然后输入以下命令:
"C:\Windows\system32\rundll32.exe" sysdm.cpl,EditEnvironmentVariables

然后在底部(在系统变量下面)编辑PATH,并确保C:\ msys64 \ mingw64 \ bin位于顶部位置

完成。

在cmd中检查如下:

echo %PATH%

您还可以通过以下方式在cmd中非持久性地编辑PATH(也不需要管理员权限):

set PATH=C:\msys64\mingw64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

在大多数情况下,您应该扩展路径而不是完全替换它。 - Wolf

1
我也遇到了类似的问题,在Windows 10上使用msys2。当我尝试使用cmake构建minimal.cpp示例时,构建过程正常进行并且没有错误。

enter image description here

但是当我尝试运行程序时,错误提示说“找不到入口点”,在搜索了几天后,我发现将libstdc++-6.dll复制到与程序相同的文件夹中,可以使程序按预期工作。

错误窗口截图(点击查看图片)

enter image description here

希望这对未来的某人有所帮助。

确切地说,这有助于在运行我链接的(静态)连接的最小 wxWidgets 应用程序时修复错误。文件 libstdc++-6.dll 可在 C:\msys64\mingw64\bin\ 中找到。 - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接