架构 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 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章