架构 x86_64 / i386 的未定义符号

Posted

技术标签:

【中文标题】架构 x86_64 / i386 的未定义符号【英文标题】:Undefined symbols for architecture x86_64 / i386 【发布时间】:2018-12-15 19:24:08 【问题描述】:

我有一个与 sqlite3 通信的本机库,它在 android 中运行良好,所以,我为 ios 编译它,编译过程顺利完成,但在令人兴奋的时候,即曾经在 Xcode 中构建 iOS 应用程序,我收到以下错误:

未找到架构 x86_64 的符号

架构 x86_64 的未定义符号: “_sqlite3_column_int64”,引用自: libgreetings.a 中的 rusqlite::statement::Statement::value_ref::h1ef4d7e4ee859386 (rusqlite-39d80e8cd3d6a115.rusqlite.99wt63ts-cgu.3.rcgu.o) “_sqlite3_column_blob”,引用自: libgreetings.a 中的 rusqlite::statement::Statement::value_ref::h1ef4d7e4ee859386 (rusqlite-39d80e8cd3d6a115.rusqlite.99wt63ts-cgu.3.rcgu.o) “_sqlite3_bind_int64”,引用自: rusqlite::statement::Statement::bind_parameter::hc14d4185381afdbf 在 ... ... ...

即使我更改了iOS Development target,如图所示here 并安装了模拟器iOS 10,并将Architectures 更改为$(ARCHS_STANDARD_32_BIT) 而不是$(ARCHS_STANDARD),如图here 我得到了同样的错误:

ld:未找到体系结构 i386 的符号

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

【问题讨论】:

【参考方案1】:

在编译应用程序之前,您应该先链接到 sqlite3 库。 请按照以下步骤操作:

    转到目标的“构建阶段”->“将二进制文件与库链接”部分。 点击添加“+”。 搜索 sqlite。 选择“libsqlite3.tbd”,“tbd”是iOS中dylib文件的新扩展。 点击“添加” 现在您的应用已成功链接到 sqlite lib,错误应该已经消失了。

【讨论】:

以上是关于架构 x86_64 / i386 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章

Quickblox:架构 x86_64 的未定义符号:错误

GoogleMapsSDK:架构 x86_64 的未定义符号

Cordova - 架构 x86_64 的未定义符号

架构 x86_64 的未定义符号:MqtUtil

切换到调试时架构 x86_64 的未定义符号

Xcode 错误 - 架构 x86_64 的未定义符号?