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

标签 c++ mysql-connector xcode4.6

我不确定是否应该将其分为两篇文章...如果是,请告诉我以供将来引用。目前,静态链接和动态链接都存在问题,我将放置明显的文本来划分两者。

我到处寻找,在这里和其他地方都找到了很多解决方案,这些解决方案似乎可以为其他人解决问题......但这些解决方案都不适合我。

提前,我下载了 Boost,它似乎没有附带库 - 并且 make 不会对其所在的目录执行任何操作(不是终端的粉丝,但我不得不 ./configure && makemakemake install 最近做了一些事情;Boost 似乎没有对这些做任何事情)。

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

静态

最初,我尝试静态链接 MySQL 库,但是失败了,给出了一长串错误(准确地说是 109 - 所有链接器)。如果可能的话,我更喜欢静态链接,因此我将在此处列出一些错误:

"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)
...

对于静态链接,我读过的一些解决方案包含了以下想法……也许库没有被链接。一种解决方案建议链接到 libstdc++。这些几乎是最广泛声称的两个解决方案,但我肯定会链接该库,并且 libstdc++ 根本不会影响错误。

动态

因此,在尝试消除静态链接错误近九个小时后,我决定转向动态库……所有链接器错误都消失了!内容足够了,我尝试运行它并且......

dyld: Library not loaded: libmysqlcppconn.7.dylib
Referenced from: /.../Example.app/Contents/MacOS/Example
Reason: image not found

...太棒了。我的第一 react 是,“哦,对了,我需要将它复制到包中。”所以,很自然地,我去检查了一下。做到了。又跑了。不用找了。今天,我找到了一些解决方案: 进入 Xcode 目录并删除 Derived Data 文件夹,然后尝试再次运行它。没有运气。我没有尝试的唯一解决方案(因为我认为我不能)是更改 dylib 的安装路径。

当我寻找静态库问题的答案时,有人提到 MySQL 站点的连接器存在此问题,但来自不同站点的(可能相同)连接器没有此问题。问题:未提供链接。

出现这些问题时,一些常见的解决方案:

  • 项目设置中未列出 header 路径,因此方法为 找不到所调用的。
  • 关闭Xcode,删除xCode目录中的Derived Data,打开项目,构建。
  • 可能在 64 位项目上使用 32 位库,反之亦然。
  • 动态库未复制到 bundle 中。
  • 该库不在链接列表中。
  • 应该清理然后构建。

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

...有人知道这笔交易可能是什么吗?我还启动了一个全新的 Cocoa 项目,并尝试让 MySQL 只连接到数据库而不做任何其他事情,结果是相同的(静态和动态)。

我正在使用 Mountain Lion 和 Xcode 4.6.2。

最佳答案

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

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 库(请注意名称与此完全相同)与可执行文件位于同一文件夹中。

关于c++ - 尝试将 MySQL 链接到项目时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007848/

相关文章:

c++ - 删除与空复制构造函数

c++ - __attribute__ 说明符可以与函数原型(prototype)和函数定义一起使用吗?

C++ ifstream 跳过数据

c++ - XCode 中的未知类型名称 'using'

mysql - MySQL 连接器的 Entity Framework 6.x 问题

ios - 如何在不使用 seagues 到 UIPopover 的情况下获得 Storyboard 创建的 UIViewController?

ios - Xcode Storyboard 和 xib 连接

python - 编程错误: 1054 (42S22): Unknown column '' ColumnName '' in ' field list'

c++ - 编译文件的 Netbeans 错误

ios - 如何从xcdatamodel生成类图?