MySQL 连接器/C++ 错误访问崩溃
MySQL Connector/C++ BAD ACCESS crash
在Xcode中使用C++,我尝试使用MySQL Connector/C++访问MySQL数据库。问题是程序(用Xcode编译)总是崩溃
EXC_BAD_ACCESS (code=13, address=0x0)
通话时
driver->connect(url, user, pass)
在Xcode中,我创建了一个完整的新项目(OS X>命令行工具),在main.cpp中插入代码(见下文),添加了Boost和MySQL Connector标头包括路径以及libmysqlcppconn.6.1.1.1.dylib作为链接库并点击运行按钮。
接下来的事情是,当我使用
c++ -o test -I /usr/local/mysqlConnector/include/ -lmysqlcppconn main.cpp
程序运行良好,并在表上运行 INSERT 语句。
程序代码取自 MySQL 连接器/C++ 示例,即 pthreads.cpp 示例,但被截断为基本部分:
/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
std::string url;
std::string user;
std::string pass;
std::string database;
/**
* Usage example for Driver, Connection, (simple) Statement, ResultSet
*/
int main(int argc, const char **argv)
{
sql::Driver *driver;
std::auto_ptr< sql::Connection > con;
url = "tcp://127.0.0.1:3306";
user = "appserver";
pass = "testpw";
database = "appserver";
try {
driver = sql::mysql::get_driver_instance();
/* Using the Driver to create a connection */
con.reset(driver->connect(url, user, pass));
con->setSchema(database);
sql::Statement* stmt = con->createStatement();
stmt->execute("INSERT INTO testtable (testnumber) values (5)");
} catch (sql::SQLException &e) {
return EXIT_FAILURE;
} catch (std::runtime_error &e) {
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
好的,问题解决了。
这里的问题是了一个编译标志。MySQL 连接器/C++ 是在没有
-stdlib=libc++
标志,但 Xcode 在其命令中添加了该编译/链接标志。这导致了崩溃。这也解释了为什么手动编译的程序可以工作,因为我没有在编译命令中包含该标志。
为了更清楚:我用-stdlib=libc++
标志重新编译了MySQL连接器/C++。然后Xcode编译的程序对我来说很好用。要编译MySQL连接器/C++我添加了
-DMYSQL_CXXFLAGS=-stdlib=libc++
到安装连接器时需要运行的cmake
命令。
make VERBOSE=1
然后证明在编译连接器源时实际使用了该标志。
我通过以下方式解决了这个问题:
- 下载
mysql-connector-c++-8.0.19-winx64
- 链接库,包括
mysqlcppconn8
和mysqlcppconn.lib
确保连接器的版本正确。8.0.19
为我工作
相关文章:
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 无法访问的代码如何导致我的程序崩溃?
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- 为什么 CUDA 在访问类成员时崩溃?
- 将多面体转换为nef(违反访问)时,与CGAL崩溃
- Windows C++程序中的访问冲突是否总是立即崩溃
- libtorrent和tcp ::受体在Windows上崩溃并违反访问
- 程序在访问shared_ptr持有QString时崩溃
- 访问使用 def 文件导出的静态变量时崩溃
- 程序在尝试创建和访问二维矢量时崩溃
- C 程序在出口时崩溃,内存中的访问违规
- 简单的Logger类VSNPrintf正在随着读取访问违规行为而崩溃
- Dx11 访问 XMMATRIX 时崩溃
- 如何调试C++非托管代码中的较低级别文件访问异常/崩溃
- GLFW setUserPointer/getUserPointer发送/访问类崩溃
- MySQL 连接器/C++ 错误访问崩溃