在Windows 64位DLL中使用new运算符导致加载失败问题求助
问题分析与解决
核心原因
你遇到的问题是MinGW64编译64位C++ DLL时,new运算符依赖的64位C++标准库动态链接文件未被系统找到。
MinGW64默认会动态链接libstdc++-6.dll、libgcc_s_seh-1.dll这类标准库文件,而你的运行环境中要么没有这些64位库,要么库的路径未被系统识别,导致DLL加载时无法找到依赖,最终返回空指针或提示找不到模块。32位版本正常是因为系统中可能已存在对应的32位标准库,或者编译时默认的链接策略不同。
解决方法
1. 静态链接C++标准库(推荐)
编译时强制将C++标准库静态打包进DLL,彻底消除外部依赖。在CodeBlocks中设置:
- 打开项目属性 → 编译器设置 → 其他选项
- 添加编译参数:
-static-libstdc++ -static-libgcc
重新编译DLL后,加载时就不需要依赖外部的标准库文件了。
2. 配置系统PATH环境变量
如果需要保持动态链接,将MinGW64的bin目录(例如C:\mingw64\bin)添加到系统的PATH环境变量中,确保系统能找到64位的标准库文件。
3. 确认编译器配置正确性
检查CodeBlocks的编译器是否指向MinGW64目录,避免误使用32位MinGW的编译工具链:
- 打开Settings → Compiler → Toolchain executables
- 确认所有工具(gcc、g++等)的路径都是MinGW64下的
bin目录中的64位版本
内容的提问来源于stack exchange,提问作者mc5021
相关产品推荐
相关产品推荐

