【问题标题】:libsqlite3.dylib, missing required architecture i386libsqlite3.dylib,缺少所需的架构 i386
【发布时间】:2012-06-21 11:52:54
【问题描述】:

我正在使用 libsqlite3.dylib,并且在编译我的项目时遇到以下错误。

ld: warning: ignoring file /Users/dcdmc/Documents/Beginning iPhone 5 Dev/Persistence copy/libsqlite3.dylib, 
             missing required architecture i386 in file
Undefined symbols for architecture i386:

"_sqlite3_open", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_close", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_exec", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o

"_sqlite3_prepare_v2", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_step", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_column_int", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o

"_sqlite3_column_text", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o

"_sqlite3_finalize", referenced from:
  -[OJViewController viewDidLoad] in OJViewController.o
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_bind_int", referenced from:
  -[OJViewController applicationWillResignActive:] in OJViewController.o

"_sqlite3_bind_text", referenced from:
  -[OJViewController applicationWillResignActive:] in OJViewController.o

ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

    标签: iphone ios ipad sqlite i386


    【解决方案1】:

    首先进行备份并检查您是否将此框架物理复制到其根目录中的项目文件夹中,如果您在那里找到它,只需从那里删除它然后重新构建。希望它有所帮助。

    【讨论】:

      【解决方案2】:

      你的目标是模拟器吗?

      问题是:

      1. 为iOS模拟器编译时,架构为i386
      2. 为 iOS 设备编译时,arch 为 armv6/armv7

      您的项目包含一个不包含 i386 代码的动态库。

      由于库是 SQLite,我的建议是不要将其作为动态库包含在内;相反,将源代码直接包含在您的项目中(它只有 2 个文件:sqlite.c 和 sqlite.h)。 可以从以下地址下载sqlite的源代码:http://www.sqlite.org

      【讨论】:

      • 动态库是个好东​​西,尤其是在资源有限的嵌入式平台上。 iOS 甚至会映射所有 dylib 文件以提高效率。当 dylib 可用时,人们不应该将源代码编译到他们的项目中(边缘情况除外,这家伙似乎不在其中)。如果他/她将源代码复制到他们的项目中,那么他们不会在未来的 iOS 版本中获得 sqlite 改进,除非他们继续手动下载新代码。 大多数 项目不希望这样。在这种情况下,这个人显然只是搞砸了框架链接。他们应该解决这个问题。
      • 谢谢!这行很有帮助:“为 iOS 模拟器编译时,架构是 i386”
      【解决方案3】:

      在类中使用 sqlite 操作之前包含此内容

      #include <sqlite3.h>
      

      【讨论】:

      • 我已经包含了 。但它仍然给我错误。
      • 在添加项目目标文件 libsqlite3.dylib 框架时。
      • libsqlite3.dylib 我用于为 armv6 而不是 7 编译的。所以你添加 libsqlite3.0.dylib
      【解决方案4】:

      我对 iOS 开发非常陌生,但我正在阅读 Apress 的书“开始 iOS 6 开发”,并在第 13 章遇到了一个非常相似的问题。我不得不使用 Text mate 在 ( YourProjectName).xcodeproj 文件并删除“LIBRARY_SEARCH_PATHS”。有两条不同的行,一条是调试构建设置,另一条是发布构建设置。我希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 2015-09-30
        • 1970-01-01
        • 2012-04-03
        相关资源
        最近更新 更多