gpt4 book ai didi

c++ - 旧版 MySQL 连接器 C++ 使用 sql::ConnectOptionsMap 异常

转载 作者:行者123 更新时间:2023-11-29 16:30:05 27 4
gpt4 key购买 nike

已经两天了,我试图理解为什么会发生这种情况,但是我没有足够的调试技能来理解为什么会发生这种情况。

我需要使用sql::ConnectOptionsMap,这样我就可以传递我想要的连接选项,例如字符集等。

举一个简单的例子:

sql::ConnectOptionsMap connection_properties;

connection_properties["hostName"] = sql::SQLString("localhost");
connection_properties["userName"] = sql::SQLString("username");
connection_properties["password"] = sql::SQLString("password");
connection_properties["CLIENT_MULTI_STATEMENTS"] = (true);

sql::Driver * driver = get_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect(connection_properties));

使用VS 2017编译,正在调试:

Exception thrown at 0x00007FFFECC811D0 (vcruntime140d.dll) in Demo.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

创建一些“迷你转储”后,我可以看到代码在这里崩溃了:

    _NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const char * const _First1,
_In_reads_(_Count) const char * const _First2, const size_t _Count) noexcept // strengthened
{ // compare [_First1, _First1 + _Count) with [_First2, ...)
#if _HAS_CXX17
return (__builtin_memcmp(_First1, _First2, _Count));
#else /* _HAS_CXX17 */
return (_CSTD memcmp(_First1, _First2, _Count)); <-- HERE
#endif /* _HAS_CXX17 */
}

有人遇到过这种情况吗?我已经搜索了很多,直到现在才发现有人遇到这个问题。

我真的无法理解为什么会发生这种情况,因为没有任何自定义,只是文档中的一个示例......

请指教。

最佳答案

我终于找到了这个问题的答案,但没有任何地方记录。您可以使用“sql::ConnectOptionsMap connection_properties;” 仅当您静态链接库时。 (mysqlcppconn-static.lib)

我是怎么发现这个的?以下惊人信息来自:http://www.voidcn.com/article/p-yltwwlte-pd.html

引用:

The strings used in the interface are all SQLString. Although it is a further wrapper of std::string, it is impossible to pass a std::string object as a parameter. Because it is a way of dynamic linking, the memory management in the DLL has no connection with the EXE. Passing the object in the past will cause an exception: bad_alloc

但是,我确实测试了文章中的代码并将其添加到 mysql_connection.cpp 中,错误消失了,但它仍然无法工作。

我的警告:

我正在构建自己的“调试”版本的 mysql-connector-cpp-master,并且由于某种原因编译不“按预期”。例如,在我的编译中,“mysqlcppconn-static.lib”无法编译为 Debug,只能编译为“RelWithDebInfo”,并且只有 10 MB,而“官方”则为 64 MB。

结论:

您必须从 MySQL 网站静态链接发布版本 (mysqlcppconn-static.lib) 才能使用“sql::ConnectOptionsMap”。我真的希望他们能够醒来并为人员和文档创建一个适当的库。

如果我能找到一种在 Debug模式下构建它的方法,我将发布更新。

关于c++ - 旧版 MySQL 连接器 C++ 使用 sql::ConnectOptionsMap 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53996316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com