Сбои при запуске MySQL Connector / C ++ из Visual Studio

У меня возникли некоторые проблемы с попыткой запустить скомпилированную программу, которая использует коннектор MySQL, в C ++. Он компилируется просто отлично, но при запуске он сразу же вылетает — похоже, на линии, которая предназначена для соединения. Я настроил все дополнительные библиотеки, зависимости, препроцессоры и входы компоновщика, и я использую конфигурацию решения Release. Я использую Microsoft Visual Studio 2012.

Я получаю следующую ошибку:
Необработанное исключение в 0x6E69AF48 (msvcr90.dll) в MyLittleSQL.exe: 0xC0000005: Местоположение чтения нарушения доступа 0x00000024.

И стек вызовов:

MyLittleSQL.exe!main() Line 24 C++
MyLittleSQL.exe!__tmainCRTStartup() Line 536 C

Строка 24 это:

con = driver->connect("tcp://127.0.0.1:3306", "sepples_su", "easy");

И полный исходный код:

#include <stdlib.h>
#include <iostream>

#include "mysql_connection.h"#include "mysql_driver.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;

int main(void)
{
try
{
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;

/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "sepples_su", "easy");

/* Connect to the MySQL test database */
con->setSchema("test");

stmt = con->createStatement();
res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
while (res->next())
{
cout << "\t... MySQL replies: ";
/* Access column data by alias or column name */
cout << res->getString("_message") << endl;
cout << "\t... MySQL says it again: ";
/* Access column fata by numeric offset, 1 is the first column */
cout << res->getString(1) << endl;
}

delete res;
delete stmt;
delete con;
}
catch (sql::SQLException &e)
{
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;
return EXIT_SUCCESS;
}

На самом деле это один из примеров, взятых из документации Connector, но я хотел убедиться, что это не моя вина.

Любая помощь здесь будет оценена, спасибо.

4

Решение

С помощью @LyubomirVasilev я скомпилировал C ++ Connector самостоятельно с настройками для Visual Studio 11 (2012). Заменив другие файлы lib и dll скомпилированными здесь, после этого все заработало идеально.

Информацию об этом можно найти здесь для любых других: http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-info.html

3

Другие решения

Новейший C ++ соединитель MySQL скомпилирован с библиотеками времени выполнения VC9 (Visual studio 2008). Visual Studio 2012 использует библиотеки VC11, поэтому понятно, почему ваша программа потерпела крах. Ваша программа должна использовать те же библиотеки времени выполнения, что и коннектор MySQL C ++:

Необработанное исключение в 0x6E69AF48 (msvcr90.dll) <— VC9

Вы должны скомпилировать свою программу с Visual Studio 2008, которая использует библиотеки VC9, или скомпилировать коннектор MySQL C ++ из исходного кода с Visual Studio 2012.

2