Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL Connector/C++ BAD ACCESS crash

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;
}
like image 370
Nero Avatar asked Feb 18 '23 17:02

Nero


1 Answers

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.

like image 197
Nero Avatar answered Feb 28 '23 02:02

Nero