体系结构的未定义符号 x86_64 / i386

Undefined symbols for architecture x86_64 / i386

我有一个与sqlite3通信的本地库,它在Android内工作正常,所以,我为iOS编译它,编译过程顺利完成,但在激动人心的时候,即在 Xcode 中构建 iOS 应用程序后,出现以下错误:

symbol(s) not found for architecture x86_64

Undefined symbols for architecture x86_64: "_sqlite3_column_int64", referenced from: rusqlite::statement::Statement::value_ref::h1ef4d7e4ee859386 in libgreetings.a(rusqlite-39d80e8cd3d6a115.rusqlite.99wt63ts-cgu.3.rcgu.o) "_sqlite3_column_blob", referenced from: rusqlite::statement::Statement::value_ref::h1ef4d7e4ee859386 in libgreetings.a(rusqlite-39d80e8cd3d6a115.rusqlite.99wt63ts-cgu.3.rcgu.o) "_sqlite3_bind_int64", referenced from: rusqlite::statement::Statement::bind_parameter::hc14d4185381afdbf in ... ... ...

即使我更改了 iOS Development target,如图 and installed simulator iOS 10, and changed the Architectures to $(ARCHS_STANDARD_32_BIT) instead of $(ARCHS_STANDARD) as shown here 我也遇到了同样的错误:

ld: symbol(s) not found for architecture i386

注意:该库是使用 rust 和 rusqlite crate 构建的,在添加 sqlite 部分之前,该库被顺利调用并执行得非常好。

在编译应用程序之前,您应该先 link 针对 sqlite3 库。 按照步骤:

  1. 转到目标的 "Build Phases" -> "Link Binary With Libraries" 部分。
  2. 点击添加“+”。
  3. 搜索 sqlite。
  4. select "libsqlite3.tbd", "tbd" 是 iOS.
  5. 中 dylib 文件的新扩展名
  6. 点击"Add" 现在您的应用已成功 linked 到 sqlite 库,错误应该已经消失了。