MySQL C++连接器:SIGABRT连接数据库

MySQL C++ Connector: SIGABRT Connecting to Database

本文关键字:连接 数据库 SIGABRT C++ 连接器 MySQL      更新时间:2023-10-16

我很难克服这个错误。最近,从Ubuntu 14.04的VM更改为将Ubuntu 15.10作为我的主机操作系统。现在我对这个项目有很多问题;这是最近的一次。在执行调用此函数DB_Interface::DB_Interface(int Preset)的代码时,我得到了一个SIGABRT信号。当从可执行文件调用此函数时,错误出现在第二个try{}catch{}块中。所以我不认为它是SetSchema特有的东西。

我试着重新安装了所有的mysql库和工具(这里)。我已经检查过使用相同的凭据从命令提示符访问服务器,没有问题。所以我倾向于C++连接器与某些东西的不兼容。。。价值百万美元的问题。所以我的问题是如何解决这个问题。更多信息如下:

系统信息:

  • Ubuntu 15.10
  • MySQL:版本14.14 Distrib 5.6.27

代码摘录:

DB_Interface::DB_Interface(int Preset) {
try{
    driver = sql::mysql::get_mysql_driver_instance();
    flags[0] = 0;
}
catch(...)
{
    flags[0] = 1;
    printf("DB_Interface: Flag 0 has been set.");
    throw Except;
}
try{
    con = driver->connect("localhost:3306", "CANS_OPERATION", "SMOOTH_OPERATOR");
    flags[1] = 0;
}
catch(...)
{
    flags[1] = 1;
    printf("DB_Interface: Flag 1 has been set.");
    throw Except;
}
try{
    con->setSchema("CANS_SQL"); //SIGABRT occurs in executing this line.
    std::string Query = "UNLOCK TABLES";
    sql::Statement *stmt;
    stmt = con->createStatement();
    stmt->execute(Query);
    flags[4] = 0;
}
catch(sql::SQLException &e)
{
    flags[4] = 1;
    printf("DB_Interface: Flag 4 has been set");
    throw Except;
}

编辑1以下尝试也没有成功。

sudo apt-get install cpp:i386 gcc:i386 g++-5:i386 gcc-5:i386 g++:i386 libboost-dev:i386 binutils:i386

随后重新安装了libmysqlcppconn-dev。

对于可能有相同问题的任何人,此问题都已解决。当我转到Ubuntu 15.10时,我使用了与上次设置相同的模式模型。在为一个测试项目测试了一个完全独立的模式之后,我没有发现任何问题。这让我预感到,在这个版本的MySQL和Ubuntu中重新创建我的模式可能会缓解一些问题。令人惊讶,令人惊讶。之后,我重新创建了用户"CANS_OPERATION"。我上面的摘录起了作用。为了让MATLAB包装器也能使用它,我将推荐的用于mex函数的g++-4.7编译器更改为最新版本。希望这能找到一个好的人。