我在项目中使用 MySQL Connector/C++ 与 MySQL 数据库进行交互。该项目编译良好。但是,当我运行它时,出现错误
Unhandled exception at at 0x000007FEFD30B16D in ProjectName.exe:
Microsoft C++ exception: std::bad_alloc at memory location 0x00000000036FC2A0.
在第一行使用数据库。在本例中,我正在执行一条 MySQL 语句
sql::Statement* stmt = mSqlCon->con->createStatement();
stmt->execute("CREATE TABLE IF NOT EXISTS ..."); // Unhandled exception
当我编译发行版时,一切正常并且不会引发任何错误。
我的环境:
- Windows 7,64 位
- Visual Studio Express 2012
可能相关的 Visual Studio 项目设置和库:
- 预处理器定义:
_DEBUG;_MBCS;_CRT_SECURE_NO_WARNINGS
- 运行时库:
多线程调试 (/MTd)
- 基本运行时检查:
两者(/RTC1,相当于/RTCsu)(/RTC1)
- MySQL 连接器/C++ 1.1.6(发布版本)
- Boost 版本 1.59.0
我的想法:
这个错误是在我开始使用boost库之后发生的。这需要更改一些项目设置,例如预处理器定义_DEBUG
(无论如何都应该用于调试构建,但之前未使用它来构建连接器)。 所以我认为问题出在项目的调试版本中使用 MySQL Connector/C++ 的发布版本。 在发布版本中一切正常。但是,我找不到连接器的任何调试版本,也无法自己构建它或使用调试库重新安装它...是否有其他解决方案可以解决我的问题(或者我搜索得不够好)?
我读到我的 MySQL 文件夹 C:\Program Files\MySQL\MySQL Connector C++ 1.1.6\lib
中应该有一个 debug
文件夹,但它只是包含一个 opt
文件夹,其中包含发布版本(我正在使用)。
非常感谢任何帮助!
最佳答案
是的,你是对的,问题在于将调试配置中的项目与 opt 文件夹内的发布库链接起来。您所要做的就是在调试配置中自行编译库的源代码:
- 来自 MySQL website ,点击选择平台,点击源代码并下载windows版本的库
- Download and install CMake如果你没有的话
- 打开命令提示符并将目录更改为您下载的源代码的目录
- 输入
(path\to\)cmake.exe -G "Visual Studio 14 2015 Win64"-DCMAKE_BUILD_TYPE=Debug
并运行;这样,您就可以告诉 CMake 构建一个可以使用 Visual Studio 14 版本(您可以选择其他版本,如果您想查看类型cmake -h
)编译的项目,用于 x64具有调试配置的机器。 - 此时,您应该在库源文件夹中看到一些 Visual Studio 项目 - 打开文件
MYSQLCONNCPP.sln
。如果您想创建静态库,请将输出文件类型更改为静态。 - 转到解决方案属性并仅选择要构建的
MYSQLCONNCPP
项目。 a) 现在转到“项目属性”,并将HAVE_STRUCT_TIMESPEC
添加到预处理器定义中(这可以防止时间规范重新定义) b) 将/EHsc
添加到 C++ -> 命令行(这可以防止与异常处理程序相关的错误) c) 更改项目的运行时库以匹配您想要将库链接到的运行时库:例如,在我的情况下,我必须将其设置为/MDd
- 如果出现其他错误,请检查 CMake 构建的所有项目属性是否编写良好:某些路径和文件名中可能存在空格。
关于c++ - 使用 MySQL Connector/C++ 调试项目时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947365/