我有一个小型的C ++项目,需要从中访问mySQL DB,所以我已经设置了mySQL Connector for C ++。 这是在OS X 10.10上完成的,我没有遇到编译/链接问题。
我为所有mysql编写了一个类,在构造函数中我想设置与db的连接。但是,这似乎有点难。
以下是该课程的相关部分:
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字符串中有这个:
未知的MySQL服务器主机'???' (0)
“主机”有时会有所不同,即使我不在代码中更改它。这似乎在内部读出了应有的不同内存位置。 但即使我在调用它时直接传递connect()变量,我也会收到此错误。在mysql类中内部保存这三个变量并使用它们调用connect()。
时也是如此任何人都知道可能导致这种情况的原因是什么?我在一个不同的项目中有类似的实现,这确实很好用,所以我有点困惑:/
答案 0 :(得分:0)
这是一个与您的情况相符的post(C ++连接器适用于Linux,在OSX上失败)。
使用mysql日志记录/跟踪或在调试器中运行它,您可能能够收集更多信息以向mysql开发人员报告。你可能会有更好的运气。
答案 1 :(得分: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++用于编译库。
所以我也用它来编译。可能这会起作用,我在项目中也包括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数据库的非常低效的访问。
祝所有遇到同样事情的人好运..