我正在尝试使用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;
...
在我的拙见中没有什么可以看到的......
答案 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