【问题标题】:Runtime error with debug build of project using MySQL Connector/C++使用 MySQL Connector/C++ 调试项目的运行时错误
【发布时间】:2015-10-05 11:22:12
【问题描述】:

我在我的项目中使用 MySQL 连接器/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 连接器/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 文件夹。

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 2020-03-08
        相关资源
        最近更新 更多