2009-02-03 78 views
6

我想在我的iPhone应用程序中使用PLDatabase框架。我已经将框架添加到我的Xcode项目中。然而,当我跑我的应用程序,它崩溃,出现以下错误:如何将第三方框架添加到iPhone项目?

dyld: Library not loaded: @loader_path/../Frameworks/PlausibleDatabase.framework/Versions/A/PlausibleDatabase 
    Referenced from: /Users/todd/Library/Application Support/iPhone Simulator/User/Applications/BB3C66B2-A5BB-4329-B163-AB0072411AF1/Congress.app/Congress 
    Reason: image not found 

我不知道确切位置的框架需要驻留在磁盘上被发现。

谢谢

回答

10

iPhone不支持嵌入式框架的动态链接。尽管您可能会使模拟器工作,但它不会在设备上工作。如果您想使用代码,您必须为框架(libpldatabase.a)构建静态库,然后将它们链接到应用程序。

Xcode GUI没有为静态链接提供一个很好的界面,您将需要在构建首选项(-lpldatabase -L/whatever/dir/it/is /中)中添加适当的标志。

6

RE @mipadi:ZeroLink在Xcode 3.1中被删除,而iPhone SDK不存在。正确答案是路易斯; iPhone在开发人员创建的应用程序中不支持动态加载的框架。

Xcode确实对静态库有很好的用户界面;只需将它们拖入项目中即可添加到链接阶段。没有必要大惊小怪与链接器标志。当你需要使用这些静态库提供的头文件时(这时你需要手动添加头文件搜索路径),或者当静态库与可用的dylib冲突时(这是你必须手动添加-l标志时) 。

8

实际上iPhone并不支持动态链接。事实是,由App Store安装的应用程序无法动态链接。

应用商店/ ituned将程序安装到/ private/var/mobile/...目录中。任何打开的子程序中打开的程序都是chroot,打开时会剥夺某些权限。 chroot进程无法分叉,无法在后台运行,无法加载动态库,也无法将文件保存在磁盘的小保护区之外(除照片以外的照片目录)。

也就是说,iPhone运行一个支持动态链接的现代操作系统就好了。 '越狱'的行为实际上是在chroot jail外部安装一个程序,然后可以执行fork和将文件保存到磁盘上的其他位置并加载动态代码。

苹果(和开放的iPhone社区)在手机上运行着大量程序(例如MobilePhone,Mobile Safari和SpringBoard应用程序),可以在后台运行和加载库。它们被放置在磁盘上的不同位置(经常是/ private/var/stash/Applications)。

因此......如果您想在应用程序商店中销售应用程序,则无法加载动态库。对大多数人来说,这意味着你根本无法加载它。但是,如果你想通过cydia(一个常见的越狱手机应用程序安装程序)分发你的应用程序,那么你可以逃脱越狱手机和加载你的dynaamic库。事实上,由于iTunes安装过程是罪魁祸首,正如你所知道的,你甚至不能从你自己的应用程序中加载一个dylib,你写给你自己的电话......除非你越狱。

相关问题