2012-04-13 3 views
4

Я пытаюсь использовать MySQL C++ Connector для подключения к базе данных. Я добавил библиотеки, и исходный код правильно компилируется со всеми необходимыми операторами #include. Код, который я использую, является следующим:MySQL Connector C++ - Invalid Pointer

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

#include "mysql_connection.h" 

#include <cppconn/driver.h> 
#include <cppconn/exception.h> 
#include <cppconn/resultset.h> 
#include <cppconn/statement.h> 

using namespace std; 

int main(void) 
{ 
    using namespace sql; 

    Driver *driver; 
    Connection *con; 

driver = get_driver_instance(); 
con = driver -> connect("tcp://127.0.0.1:3306/test", "test", "test"); 
} 

Код взят из примеров и должен работать должным образом. Я значительно сократил код, так как он находится на финальной строке «driver -> connect», где возникает ошибка. Мое сообщение об ошибке является следующее:

*** glibc detected *** /home/username/NetBeansProjects/mysql/dist/Release/GNU-Linux-x86/mysql: 
free(): invalid pointer: 0x091dd468 *** 

Я на Linux Mint Лиза, работает под управлением последней версии MySQL и с помощью NetBeans 7.1 в качестве IDE. Как уже упоминалось, код компилируется правильно, и он находится на этой последней линии соединения, где происходит ошибка. Любая помощь или рекомендации для другого механизма подключения будут высоко оценены.


UPDATE

Вот код из класса Driver, где соединение определяется

class CPPCONN_PUBLIC_FUNC Driver 
{ 
protected: 
virtual ~Driver() {} 
public: 
// Attempts to make a database connection to the given URL. 

virtual Connection * connect(const sql::SQLString& hostName, const sql::SQLString& userName, const sql::SQLString& password) = 0; 

virtual Connection * connect(ConnectOptionsMap & options) = 0; 

... 

Ничего увидеть там ... по моему скромному мнению ...

+0

Это выглядит так, как будто какая-то память была free'd, а затем попыталась быть free'd снова, но терпит неудачу, потому что он больше не выделяются. Cant действительно скажите по коду, который вы опубликовали, можете ли вы опубликовать остальную часть или поместить ссылку на код примера? – TomP89

+0

Это все код! Я выложу код со страницы с помощью драйвера -> connect, но это приходит прямо из команды разработчиков MySQL Connector, поэтому я сомневаюсь, что она будет содержать ошибку: /. –

+0

Является ли 'get_driver_instance' ваш код или является частью Connector? Если он принадлежит вам, отправьте _that_. – ildjarn

ответ

3

Я нашел решение этой проблемы для Ubuntu 12.04, мне потребовалось около 48 часов сна, но все в порядке. Я уверен, что это исправление будет работать и для других версий Ubuntu. Скачайте libstdC++. So.5 от http://www.sopcast.com/download/libstdcpp5.tgz. Вам нужно извлечь и поместить файлы в/usr/lib.

Убедитесь, что вы добавить -llibstdC++. So.5 при построении приложения с г ++ (это ссылки STDC++ v5)

Затем Google «Разъем C++ Ubuntu 12,04» и искать Строит и скачать .deb для вашего архипелаг

Для Ubuntu 12.04 вот URL-адрес .debs https://launchpad.net/ubuntu/precise/+source/mysql-connector-c++/+builds Выберите свою арку, т.е. Amd64 и загрузите два .debs под встроенными файлами. Откройте и установите с помощью диспетчера пакетов. Теперь вы сможете запускать приложение без проблем и проблем.

EDIT Вам не нужно связывать libstdC++. So.5, вы, возможно, придется на вашей системе, но на Ubuntu 12.04 amd64 его не требуется.

1

Попросите свои программы на C++ разговаривать с MySQL менее чем за 2 минуты!

ПРИМЕЧАНИЕ: это работает на серверах Ubuntu 12.04 (AWS EC2) с MySQL (типичная настройка LAMP), не гарантируется обратная совместимость.

Для доступа к базам данных MySQL из программы на C++, вы должны сначала установить некоторые библиотеки MySQL файлы с помощью следующей командной строки

sudo apt-get install libmysqlclient-dev 

сохранить файл конфигурации под названием «mysql_config» в том же каталоге, где вы будете экономить (и запустите приложение - скажем, «/ temp»)

mysql_config --cflags 
-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX 
mysql_config --libs 
-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient 

скомпилировать ваш файл C++ «myapp.каст», с

sudo g++ -o myapp $(mysql_config --cflags) myapp.cpp $(mysql_config --libs) 

на основе this excellent functional example написанного Coding Friends

+2

Вы отправили этот самый ответ четыре раза сейчас, мы считаем, что немного спам. Пожалуйста, не делайте этого. Если вы делаете это, это обычно означает, что вопросы являются дубликатами, поэтому отмечайте их как таковые. Если они не являются точными обманами, просто оставляйте комментарий под вопросом, указывающим на этот ответ. Благодарю. – Kev

+1

Прошу прощения @ Kev, ответ был уместен для 4 вопросов. что мне делать? оставить эти вопросы без надлежащего ответа? они не являются точными дубликатами, они являются действительными вопросами, и мой ответ действительно для всех из них. я мог ответить, указывая на ответ по другому вопросу, но никто этого не читает. И предыдущие ответы на эти вопросы были откровенно хромыми, ИМХО. НО, поскольку вы создаете правила, я больше не буду этого делать, чтобы снова не называться спамом, пытаясь помочь другим. ps: Я пытаюсь изменить ответы, чтобы не быть «спам», но не могу их найти, извините. –