MySQL Connector/C++ BAD ACCESS crash

北城余情 提交于 2019-12-01 04:56:34

问题


Using C++ in Xcode I try to access a MySQL database with the MySQL Connector/C++. Problem is that the program (compiled with Xcode) always crashes with

EXC_BAD_ACCESS (code=13, address=0x0)

when calling

driver->connect(url, user, pass)

In Xcode I created a complete new project (OS X > Command Line Tool), inserted the code (see below) in the main.cpp, added Boost and MySQL Connector header include paths as well as libmysqlcppconn.6.1.1.1.dylib as Link Library and hit the Run button.

Next thing is, when I compile the program manually using

c++ -o test -I /usr/local/mysqlConnector/include/ -lmysqlcppconn main.cpp

the program runs fine and also runs the INSERT statement on the table.

The program code is taken from the MySQL Connector/C++ examples, namely the pthreads.cpp example, but truncated to the essential parts:

/* 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;
}

回答1:


Ok, the problem is solved.

Here the problem was one compile flag. The MySQL Connector/C++ was compiled without the
-stdlib=libc++ flag, but Xcode added that compile/link flag to its commands. This caused the crash. This also explains, why the manually compiled program worked, as I didn't include that flag to the compile command.

To make it more clear: I recompiled the MySQL Connector/C++ with the -stdlib=libc++ flag. Then the program compiled by Xcode works fine for me. To compile the MySQL Connector/C++ I added

-DMYSQL_CXXFLAGS=-stdlib=libc++

to the cmake command that needs to be run when installing the connector.

make VERBOSE=1

then proved that the flag is actually used when compiling the connectors source.



来源:https://stackoverflow.com/questions/14570347/mysql-connector-c-bad-access-crash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!