2016-09-13 151 views
0

我有一个小型C++项目,需要从中访问一个mySQL DB,所以我已经为C++设置了mySQL连接器。 这是在OS X 10.10上完成的,我没有遇到编译/链接问题。Mysql连接器connect()问题

我已经写了所有的mysql的东西的类,并在构造函数中我想建立到数据库的连接。但是,这似乎很艰难。

下面是相关的部分从类:

class mysql{ 

public: 

    mysql(std::string server, std::string user, std::string password); 

private: 

    sql::mysql::MySQL_Driver *driver; 
    sql::Connection *con; 

    std::string last_error = ""; 

}; 

在这里实现:

mysql::mysql(std::string server, std::string user, std::string password){ 

    driver = sql::mysql::get_mysql_driver_instance(); 

    try{ 

    con = driver->connect(server, user, password); 

    last_error = ""; 

    } 
    catch(sql::SQLException &e){ 

    last_error = e.what(); 

    } 

} 

然而,当我创建像这样的类的对象:

mysql db("tcp://127.0.0.1:3306", "root", "secretsecret"); 

然后,我在我的last_error字符串中有这个:

Unknown MySQL server host '???' (0)

“主机”有时甚至不同,即使我不在代码中改变它。这看起来像是在内部读取不同的内存位置,因为它应该是。 但即使我直接传递connect()变量时,我得到这个错误。将这三个变量内部保存在mysql类中并使用它们调用connect()时也是如此。

任何人有一个想法可能会导致这种情况?我有一个类似的实现在一个不同的项目中,这可以很好地工作,所以我有点困惑:/

+0

看起来像传递“服务器”的内存损坏。 – blackpen

+0

叶这就是我的想法,但我不知道为什么它会损坏.. –

+0

你可以创建一个最小的测试用例,重现问题,然后进入调试器,并破坏** MySQL_Driver :: connect **的代码。这是您想要打印** hostName **的地方。 – blackpen

回答

0

这是一个post与您的情况相匹配(C++连接器在linux上工作,在OSX上失败)。

通过使用mysql日志记录/跟踪或在调试器中运行它,您可能能够收集更多信息以向mysql开发人员报告。你可能会有更好的运气。

0

后googeling的很长一段时间,我发现这个最有用的链接:https://apple.stackexchange.com/questions/251290/weird-behaviour-of-mysql-connector-c-in-osx

继提示那里,我重新编译myscl C连接器,然后将MySQL的C++连接器(版本1.1.6原因1.1.7引起编译时出现json错误)。

我也在C++连接器的cmake日志中看到Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++被用来编译库。

所以我用那一个也是我的汇编。这可能是因为这会工作,寿在我的项目IM还包括wxwisgeds造成此错误:

/usr/local/include/wx-3.0/wx/strvararg.h:30:18: fatal error: 'tr1/type_traits' file not found 
    #include <tr1/type_traits> 

我发现了一个一些提示,但他们都只是产生了新的错误的马西沃量,所以我停在这里深入挖掘。

我最好的选择是创建两个独立的程序,与mysql进行通信,并提供gui,让他们通过套接字或文件提供非常低效的MySQL数据库访问。

对任何遇到同样事情的人来说,祝你好运。