2012-04-13 80 views
4

我想使用MySQL C++连接器连接到数据库。我已经添加了库和源代码正确编译所有必要的#include语句。我正在使用的代码如下:MySQL连接器C++ - 无效指针

#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"); 
} 

该代码是从示例中采取并且应该正常工作。我大大缩短了代码,因为它在错误发生的最后一个“驱动程序 - >连接”行。我的错误消息如下:

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

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


UPDATE

这里是从哪里连接定义

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,但失败,因为它不再分配写入。无法真正告诉你已发布的代码,你可以发布其余的代码吗?或者链接到示例代码? – TomP89 2012-04-13 22:03:40

+0

这就是所有代码!我将使用驱动程序 - > connect函数从页面发布代码,但是直接来自MySQL Connector开发团队,所以我怀疑它会包含一个错误:/。 – 2012-04-13 22:06:36

+0

'get_driver_instance'是你的代码还是连接器的一部分?如果它是你的,发布_that_。 – ildjarn 2012-04-13 22:15:53

回答

3

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

相克构建应用程序时,请确保您添加-llibstdC++。so.5的++(此链接STDC++ V5)

然后谷歌的连接器C++的Ubuntu 12.04“,并寻找构建和下载的.deb您拱。

对于Ubuntu 12.04,这里是.debs的URL https://launchpad.net/ubuntu/precise/+source/mysql-connector-c++/+builds 选择你的拱门ie。 Amd64并下载构建文件下的两个.debs文件。使用软件包管理器打开并安装。你现在应该可以运行你的应用程序没有和问题。

编辑 你不需要++。so.5的链接的libstdc,您可能需要您的系统上,但在Ubuntu 12.04 AMD64它不是必要的。

1

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

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

要从C++程序访问MySQL数据库,您必须使用以下命令行

sudo apt-get install libmysqlclient-dev 

保存在同一目录下名为“mysql_config”配置文件,您将节省(第一安装一些mysql的库文件并运行你的应用程序 - 让我们说 “/ 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 exampleCoding Friends

+2

你已经四次发布这个非常相同的答案,我们认为这有点垃圾。请不要这样做。如果你这样做,那么它通常意味着问题是重复的,所以标记它们。如果他们不是确切的愚蠢,那么只需在指出这个答案的问题下留言。谢谢。 – Kev 2012-09-11 23:11:42

+1

我道歉@Kev,答案适用于4个问题。我该怎么办?没有正确的答案留下这些问题?他们不是完全重复的,他们是有效的问题,我的答案对所有人都有效。我可以回答指出另一个问题的答案,但没有人读到。而且,对于这些问题以前的答案是非常坦率的,恕我直言。但是,既然你制定了规则,我不会再这样做,以免我再次被称为“垃圾邮件”来帮助别人。 ps:我试图改变答案,以免“垃圾”,但无法找到他们,对不起。 – 2012-09-13 13:49:20