Windows10下MATLAB R2016b MinGW64编译MySQL C++ mex文件报错求解
问题根本原因
你遇到的报错核心是编译器ABI不兼容,并非单纯遗漏依赖库:
- 你当前使用MinGW64编译器编译mex程序,但链接的MySQL 8.0官方默认提供的
libmysqlclient.lib是Visual Studio(MSVC)编译生成的导入库,两种编译器的库格式、运行时符号不互通,就会出现.drectve损坏警告,以及MSVC专属运行时符号(__security_check_cookie、__GSHandlerCheck等)、系统API符号(__imp_getaddrinfo等)缺失的报错。
解决方案
按操作复杂度从低到高排序,可根据你的实际情况选择:
方案1:替换适配MinGW的MySQL库(最推荐)
操作步骤:
- 获取MySQL提供的MinGW适配版本
libmysqlclient.lib,也可以直接从已编译的MinGW版MySQL安装包中提取对应库文件 - 替换原
C:\Program Files\MySQL\MySQL Server 8.0\lib路径下的MSVC版本libmysqlclient.lib,或者单独存放在新路径后修改linklib变量指向新路径 - 重新执行原mex命令即可。
方案2:给MinGW补充缺失的系统依赖库
如果暂时找不到适配的MinGW版MySQL库,可以先尝试在mex命令末尾追加两个依赖库参数,补充系统调用和安全检查相关的符号:
mex('<my script>', '-v', ['-I' inclib], ['-L' linklib], '-lmysqlclient', '-lws2_32', '-lgcc_s')
-lws2_32对应Windows套接字库,提供getaddrinfo等网络相关符号-lgcc_s对应MinGW的GCC运行时库,可尝试补充部分安全检查相关符号
该方案存在一定概率失败,核心原因还是MSVC和MinGW的底层库格式不兼容。
方案3:切换MATLAB的mex编译器为MSVC
如果上述两个方案都不可行,可以直接切换到和MySQL官方库适配的MSVC编译器:
- 安装MATLAB R2016b支持的Visual Studio版本(VS2012~VS2015均可,R2016b最高支持VS2015)
- 在MATLAB命令行执行
mex -setup C++,选择安装的MSVC编译器作为默认C++编译器 - 重新执行原mex命令即可,无需修改其他参数。
内容的提问来源于stack exchange,提问作者MRusalka
相关产品推荐
相关产品推荐

