使用MySQL Connector / C ++调试构建项目的运行时错误

时间:2015-10-05 11:22:12

标签: 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

当我为Release编译时,一切正常,没有错误抛出。

我的环境:

  • Windows 7,64位
  • Visual Studio Express 2012

可能相关的Visual Studio项目设置和库:

  • 预处理程序定义:_DEBUG;_MBCS;_CRT_SECURE_NO_WARNINGS
  • 运行时库:Multi-threaded Debug (/MTd)
  • 基本运行时检查:Both (/RTC1, equiv. to /RTCsu) (/RTC1)
  • MySQL Connector / C ++ 1.1.6(发行版)
  • Boost Version 1.59.0

我的想法: 我开始使用boost库后发生此错误。这需要更改一些项目设置,例如预处理器定义_DEBUG(无论如何都应该用于调试版本,但之前没有使用它来构建连接器)。 所以我认为问题是在项目的调试版本中使用MySQL Connector / C ++的发布版本。在发布版本中一切正常。但是,我找不到连接器的任何调试版本,我也无法自己构建或使用调试库重新安装...是否有另一种解决我的问题的方法(或者我搜索不够好)?

我读到我的MySQL文件夹debug中应该有一个C:\Program Files\MySQL\MySQL Connector C++ 1.1.6\lib文件夹,但它只包含一个opt文件夹,其中包含发布版本(我正在使用)。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

是的,你是对的,问题在于将Debug配置中的项目与opt文件夹中的Release库链接。您所要做的就是在Debug配置中自己编译库的源代码:

  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)现在转到Project Properties,并将HAVE_STRUCT_TIMESPEC添加到预处理器定义(这可以防止timespec重新定义) b)将/EHsc添加到C ++ - >命令行(这可以防止与异常处理程序相关的错误) c)更改项目的运行时库以匹配要将库链接到的项目:例如,在我的情况下,我必须将其设置为/MDd
  7. 如果出现其他错误,请检查CMake构建的所有项目属性是否写得很好:它可能有一些路径和文件名有问题,里面有空格。

答案 1 :(得分:1)

我遇到了同样的问题。这是因为配置的差异。如果mysql包装器是一个单独的.lib文件,则可以调试客户端应用程序。如果已下载并安装了Mysql发行版,那么您需要构建一个连接/查询等包装器并将其作为发行版.lib导出到其他项目。可以使用提供的跟踪选项调试Mysql。 MYSQL DEBUG TRACE C++