c++ - 使用 MySQL Connector/C++ 调试项目时出现运行时错误

标签 c++ mysql visual-studio-2012 mysql-connector

我在项目中使用 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 文件夹内的发布库链接起来。您所要做的就是在调试配置中自行编译库的源代码:

  1. 来自 MySQL website ,点击选择平台,点击源代码并下载windows版本的库
  2. Download and install CMake如果你没有的话
  3. 打开命令提示符并将目录更改为您下载的源代码的目录
  4. 输入 (path\to\)cmake.exe -G "Visual Studio 14 2015 Win64"-DCMAKE_BUILD_TYPE=Debug 并运行;这样,您就可以告诉 CMake 构建一个可以使用 Visual Studio 14 版本(您可以选择其他版本,如果您想查看类型 cmake -h)编译的项目,用于 x64具有调试配置的机器。
  5. 此时,您应该在库源文件夹中看到一些 Visual Studio 项目 - 打开文件 MYSQLCONNCPP.sln。如果您想创建静态库,请将输出文件类型更改为静态。
  6. 转到解决方案属性并仅选择要构建的 MYSQLCONNCPP 项目。 a) 现在转到“项目属性”,并将 HAVE_STRUCT_TIMESPEC 添加到预处理器定义中(这可以防止时间规范重新定义) b) 将 /EHsc 添加到 C++ -> 命令行(这可以防止与异常处理程序相关的错误) c) 更改项目的运行时库以匹配您想要将库链接到的运行时库:例如,在我的情况下,我必须将其设置为 /MDd
  7. 如果出现其他错误,请检查 CMake 构建的所有项目属性是否编写良好:某些路径和文件名中可能存在空格。

关于c++ - 使用 MySQL Connector/C++ 调试项目时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947365/

相关文章:

c++ - 用于创建锁层次结构的实用程序?

c++ - 构建项目时出现链接器错误

c++ - for 中的迭代器无限循环列表

php - Cakephp:同时插入 tinyint 字段。仅获取 "0"或 "1"

asp.net - 在 Visual Studio 中使用断点调试 Typescript

C#类图动态更新

c++ - 在什么情况下您会得到 __declspec(dllimport) 的未解析外部符号?

php - Laravel 4.1 如何获取索引 View 中每个父记录的条件子记录计数?

c++ - 在编译时使用 CRC32 算法对字符串进行哈希处理

mysql - SQl脚本文件需要在Mysql中执行