MySQL Connector C ++ - 无效的指针

时间:2012-04-13 21:50:41

标签: c++ mysql mysql-connector

我正在尝试使用MySQL C ++ Connector连接到数据库。我添加了库和源代码正确编译了所有必要的#include语句。我正在使用的代码如下:

#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 - &gt; connect”行中抛出错误。我的错误消息如下:

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

我在Linux Mint Lisa上,运行最新版本的MySQL并使用NetBeans 7.1作为IDE。如上所述,代码正确编译,并且它位于发生错误的最后一个连接行。任何有关其他连接机制的帮助或建议都将不胜感激。


更新

以下是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;

...

在我的拙见中没有什么可以看到的......

2 个答案:

答案 0 :(得分:3)

我已经为Ubuntu 12.04找到了这个问题的解决方案,它让我花了大约48小时没有睡觉但是好了,这里有。我确定这个修复程序适用于其他版本的Ubuntu。 从http://www.sopcast.com/download/libstdcpp5.tgz下载libstdc ++。so.5。您需要提取并将文件放在/ usr / lib。

确保在使用g ++构建应用程序时添加-llibstdc ++。so.5(此链接stdc ++ v5)

然后谷歌'连接器c ++ Ubuntu 12.04'并寻找Builds并下载Arch的.deb。

对于Ubuntu 12.04,这里是.debs的URL https://launchpad.net/ubuntu/precise/+source/mysql-connector-c++/+builds 选择你的拱门即。 Amd64并在Built Files下下载两个.debs。使用包管理器打开并安装。您应该能够在没有和发布的情况下立即运行应用程序。

修改 您不需要链接libstdc ++。so.5,您可能必须在您的系统上,但在Ubuntu 12.04 amd64上它不需要。

答案 1 :(得分:1)

让您的C ++程序在2分钟内与MySQL通信!

注意:这适用于带有MySQL的Ubuntu 12.04服务器(AWS EC2)(典型的LAMP设置),不保证向后兼容性。

要从C ++程序访问MySQL数据库,必须先使用以下命令行安装一些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.cpp”
sudo g++ -o myapp $(mysql_config --cflags) myapp.cpp $(mysql_config --libs)

基于this excellent functional example

撰写的Coding Friends