尝试将MySQL链接到项目时出错

时间:2013-06-09 08:29:05

标签: c++ mysql-connector xcode4.6

我不确定我是否应该把它分成两个帖子......如果是的话,请告诉我以供将来参考。目前,静态链接和动态链接都存在问题,我会将明显的文本分成两部分。

我到处寻找并在这里和其他地方找到了很多解决方案,似乎可以解决其他问题...但这些解决方案都没有对我有用。

提前,我下载了Boost并且它似乎没有附带库 - 并且make对它所在的目录没有做任何事情(不是终端的粉丝,但我不得不{{1最近有一些事情发生了; {,} ./configure && makemake; Boost似乎没有做任何事情。)

我已经在使用SDL和我自己的静态库了。当然,MySQL Connector / C ++也不需要。但它确实需要Boost。

静态

最初,我试图静态链接MySQL库,但是通过给我一长串错误(确切地说是109个 - 所有链接器)而失败了。如果可能的话,我更喜欢静态链接,所以我会在这里列出一些错误:

make install

对于静态链接,我读过的一些解决方案包含了......也许图书馆没有链接。一个解决方案建议链接到libstdc ++。这几乎是两个最广泛声称的解决方案,但我肯定链接库和libstdc ++根本没有影响错误。

动态

所以,在接近9个小时试图让静态链接错误消失之后,我决定转移到动态库......所有的链接器错误都消失了!内容足够,我试着运行它......

"std::istream::gcount() const", referenced from:
 sql::mysql::LongDataSender::operator()(std::istream*) const in libMySQL.a(mysql_prepared_statement.cpp.o)
"std::string::find_last_of(char, unsigned long) const", referenced from:
  sql::mysql::parseUri(sql::SQLString const&, sql::mysql::MySQL_Uri&) in libMySQL.a(mysql_uri.cpp.o)
"std::string::find_first_of(char, unsigned long) const", referenced from:
  sql::mysql::MySQL_ConnectionMetaData::getTablePrivileges(sql::SQLString const&, sql::SQLString const&, sql::SQLString const&) in libMySQL.a(mysql_metadata.cpp.o)
"std::string::find(std::string const&, unsigned long) const", referenced from:
  sql::mysql::MySQL_ConnectionMetaData::getColumnPrivileges(sql::SQLString const&, sql::SQLString const&, sql::SQLString const&, sql::SQLString const&) in libMySQL.a(mysql_metadata.cpp.o)
  sql::mysql::MySQL_ConnectionMetaData::getIdentifierQuoteString() in libMySQL.a(mysql_metadata.cpp.o)
...
sql::SQLString, boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_>, std::less<sql::SQLString>, 
std::allocator<std::pair<sql::SQLString const, boost::variant<int, double, bool, 
sql::SQLString, boost::detail::variant::void_, boost::detail::variant::void_,   
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_, 
boost::detail::variant::void_, boost::detail::variant::void_> > > >&) in 
libMySQL.a(mysql_connection.cpp.o)
...

......很棒。我的第一直觉是,“哦,对,我需要把它复制到捆绑中。”所以,当然,我去检查一下。做到了。再次跑。没变。今天,我找到了一些解决方案:转到Xcode目录并删除Derived Data文件夹并尝试再次运行它。没运气。我没有尝试的唯一解决方案(因为我认为我不能)正在改变dylib的安装路径。

当我在寻找静态库问题的答案时,有人提到MySQL网站的连接器有这个问题,但来自不同网站的(可能是相同的)连接器没有问题。问题:没有给出链接。

当出现这些问题时,一些经常声称的解决方案:

  • 标题路径未在项目设置中列出,因此方法正在进行中 叫不能找到。
  • 关闭Xcode,删除xCode目录中的派生数据,打开项目,构建。
  • 可能在64位项目上使用32位库,反之亦然。
  • 未将动态库复制到捆绑包。
  • 图书馆不在链接列表中。
  • 应该清理然后再建造。

现在......在这个列表之外,我已经检查过以确保它们都是正确的,因为我知道如何获取它们,如前所述,我已经下载了Boost。是的,我确保头和路径都包含在项目设置中,与MySQL的相同。

......任何人都知道这笔交易可能是什么?我还启动了一个全新的Cocoa项目,试图让MySQL只使用数据库而不是其他任何东西,结果是相同的(静态和动态)。

我正在使用Mountain Lion和Xcode 4.6.2。

2 个答案:

答案 0 :(得分:3)

对于动态链接,我认为你和我有同样的问题。当我编译时,我指定该库位于另一个文件夹

g++ -I /opt/local/include/ -I /opt/local/include/mysql55-connector-cpp/driver/ -I /opt/local/include/mysql55-connector-cpp/cppconn/ -L libs/ -l mysqlcppconn db_layer.cpp

当您实际运行该文件时,您需要libmysqlcppconn.7.dylib库(请注意名称与此完全相同)与您的可执行文件位于同一文件夹中。

答案 1 :(得分:0)

我遇到了你在这里描述的同一个问题,不幸的是,根据this post,即使你确实要编译它,它也不能正确链接,你必须编译它你自己使用正确的编译器标志。也就是说,一旦您正确编译了可执行文件,您就可以使用this page中描述的工具告诉它在您的Frameworks文件夹中查找dyld。

祝你好运。