【问题标题】:Compiling custom SQLite for an iPhone app为 iPhone 应用程序编译自定义 SQLite
【发布时间】:2009-05-05 07:11:03
【问题描述】:

我正在尝试将 SQLite amalgamation 源代码编译到我的 iPhone 应用程序中(以便我访问 iPhone 编译的二进制版本中不可用的全文搜索功能。

当我将 sqlite3.c 和 sqlite3.h 添加到普通的 Carbon C 应用程序模板时,它编译得很好(带有一个关于未使用变量的警告),但是当我尝试在我的 iPhone 项目中编译它时,我得到一个数字与缺少函数声明有关的错误。我可以通过显式包含 ctype.h 来解决这些问题,但这有点奇怪。

但是,即使在它构建之后,它也无法链接并出现以下错误:

"_sqlite3_version", referenced from:
_sqlite3_version$non_lazy_ptr in sqlite3.0
symbol(s) not found
collect2: ld returned 1 exit status

我认为这是 iPhone 应用程序的构建设置中的内容,但我无法弄清楚。有什么想法吗?

【问题讨论】:

  • 为什么要使用 Carbon C 应用模板进行 iPhone 部署?
  • 我不是。我只是想看看它是否可以在任何地方编译——即,如果 iPhone 项目的设置导致了问题——所以我认为基本的 Carbon C 模板干扰的可能性最小。
  • (顺便说一句,我是对的,因为它编译得很好)
  • 啊,好吧,我看错了。我也在 iPhone 项目上使用 sqlite3 合并,我没有遇到任何不编译的问题。
  • 这就是我在网上找到的所有参考资料都在说的——只需放入这两个文件就可以了。唉...

标签: iphone xcode sqlite


【解决方案1】:

按照以下步骤尝试:

  1. xcode菜单->项目->新目标->静态库->目标名称:SQLite
  2. 将 SQLite 合并源放到项目中,现在可以选择目标,选择 SQLite
  3. xcode menu -> project -> edit active target -> tab General -> Direct Dependencies -> add SQLite
  4. 选项卡常规 -> 链接库 -> 添加您的 SQLite

【讨论】:

【解决方案2】:

我已经设法使用合并来做到这一点,并将其直接转储到我的项目中,而无需执行 catlan 建议的链接(我并不是说这是一个坏主意,只是可以在主项目中进行)。

我不需要编辑任何东西(除了为文本搜索添加必要的 FTS 定义)并且编译时没有错误。检查您的构建设置并确保“-sqlite3”不在您的其他链接标志中。

【讨论】:

    【解决方案3】:

    这种类型的错误通常意味着缺少框架。

    1. 右键或控制单击您项目的 Frameworks 文件夹。
    2. 选择添加 > 现有框架...
    3. 转到:Macintosh HD > Developer > Platforms > iPhoneOS.platform > Developer > SDKs > iPhoneOS2.2sdk > usr > lib 并选择 libsqlite3.dylib
    4. 重建您的项目

    我认为这应该会处理好它。您可能需要添加一个类似的库才能在 iPhone 模拟器上运行。

    【讨论】:

    • 但是如果我这样做,它将链接到内置的 SQLite 库,对吗?而我想使用我的自定义编译的(因为它具有内置的功能)。
    • 我不知道你能做到这一点。我有一种感觉,Apple 不会喜欢它。不过我可能是错的
    • @bdotdub - 你绝对可以做到 - 为什么苹果会关心?这不像是他试图替换系统版本,只是在他的应用程序使用的新版本中编译。这是相当标准的做法。
    • 为什么他也想要 SQLite 的 iOS 版本?
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多