【问题标题】:How to fix 'Undefined symbols for architecture x86_64: "_get_driver_instance" ' linker error如何修复“架构 x86_64 的未定义符号:“_get_driver_instance””链接器错误
【发布时间】:2019-12-05 22:01:58
【问题描述】:

我正在尝试使用 c++ 和 mysql (mysql-connector-c++) 构建一个简单的项目。
经过几个小时的工作,我设法解决了将 boost lib 和 mysql-connector-c++ lib 与我在 Xcode 中的项目链接的问题。

通过将这些路径添加到我的 Xcode 项目来解决它: (在标题和库搜索路径中,在项目构建设置中)

headers and library search paths

现在,当我尝试使用以下 mysql 示例与我的数据库建立简单连接时:

void DataBase::connectToDataBase() {

    driver =  get_driver_instance();
    setConectionProperties();

    try {
        connection = driver->connect(*properties);
        connection->setSchema(DATABASE);
    }catch (SQLException &e) {
        cout << e.what();
    }
    this->~DataBase();
    exit(1);
}

My complete code

我收到以下错误:

架构 x86_64 的未定义符号: “_get_driver_instance”,引用自: DataBase.o 中的 DataBase::connectToDataBase() ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

Full error log with linker command line

我对链接器错误以及如何修复它们了解不多。 我用谷歌搜索了这个问题,发现这是一个非常常见的问题,但没能理解或解决它。

如果您有任何建议,我将很高兴听到。

一些必要的细节:
我正在使用 MacBook Air High Sierra 版本 10.13.6
通过 Homebrew 安装了“boost”和“mysql-connector-c++”。
我正在使用 Xcode 10.1 版

  • 如果缺少某些详细信息,请告诉我,我会立即添加它们。

提前谢谢你!

【问题讨论】:

  • get_driver_instance() 定义在哪里?
  • @nivpeled in driver.h from 'mysql-connector-c++' lib。像这样: extern "C" { CPPCONN_PUBLIC_FUNC sql::Driver * get_driver_instance(); } 在类驱动程序之外
  • 好的,你的链接器命令行是什么?
  • @nivpeled 就是链接器命令行的意思:link(来自 Xcode 的照片)
  • @nivpeled 我添加了-lmysqlcppconn(没有'8')并且它的工作!谢谢!!!

标签: c++ mysql xcode macos linker


【解决方案1】:

我的问题的解决方案是:

在“其他链接器标志”中添加标志:“-lmysqlcppconn”

(“其他链接器标志”可以在项目构建设置的“链接”中找到)

The solution

  • 非常感谢@nivpeled

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多