Windows运行C++编译程序出现_ZNKSt7__cxx11入口点未找到错误
问题描述
我编写了一个包含文件读写、打印功能,且能通过外部可执行程序下载文件的简单代码,读取文件使用mINI库。
- 引入的头文件:
string iostream cctype vector stdio.h memory cstdio stdexcept sstream "mini/ini.h" memory - 定义的宏:
CURL_STATICLIB - 编译Windows 32位程序的命令:
i686-w64-mingw32-g++ -o main.exe main.cpp - 运行时错误信息:
Der Prozedureinsprungpunkt "_ZNKSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE12find_last_ofEcj" wurde in der DLL "J:\main.exe" nicht gefunden.
翻译后:
The procedure entry point "_ZNKSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE12find_last_ofEcj" was not found in the DLL "J:\main.exe".
解决方法
这个错误是GCC C++标准库ABI不兼容导致的:__cxx11是GCC 5.0及以上版本引入的新std::string实现,你的编译环境和运行环境的标准库ABI版本不匹配,或者链接了不同ABI的依赖库。
尝试以下方案:
- 强制使用旧ABI编译
添加-D_GLIBCXX_USE_CXX11_ABI=0编译选项,让编译器生成兼容旧ABI的代码:i686-w64-mingw32-g++ -D_GLIBCXX_USE_CXX11_ABI=0 -o main.exe main.cpp - 静态链接标准库
将C++标准库和GCC运行库打包进可执行文件,避免依赖系统中的DLL:i686-w64-mingw32-g++ -static-libstdc++ -static-libgcc -o main.exe main.cpp - 统一依赖库编译环境
确保mINI库也是用相同版本的i686-w64-mingw32-g++编译的,且编译选项一致,避免跨ABI链接。
内容的提问来源于stack exchange,提问作者Kroyz
相关产品推荐
相关产品推荐

