我想在我的iPhone应用程序中使用PLDatabase框架.我已经将框架添加到我的Xcode项目中.但是,当我运行我的应用程序时,它崩溃并出现以下错误:
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
我不确定框架需要驻留在磁盘上的确切位置.
谢谢
iPhone不支持嵌入式框架的动态链接.虽然您可能能够使模拟器工作,但它无法在设备上运行.如果要使用代码,则必须为框架(libpldatabase.a)构建静态库,然后将它们链接到应用程序.
Xcode GUI没有为静态链接提供良好的接口,您需要在构建prefs中添加适当的标志(-lpldatabase -L/whatever/dir/it/is/in).
iPhone不支持动态链接实际上并不完全正确.真实情况是App Store安装的应用程序无法动态链接.
app store/ituned将程序安装到/ private/var/mobile/...目录中.生活在该子目录中的任何程序都是chrooted,并且在打开时会剥离某些权限.chrooted进程不能fork,它们无法在后台运行,它们无法加载动态库,也无法将文件保存在磁盘的小保护区域之外(照片到照片目录除外) ).
也就是说,iPhone运行的现代操作系统支持动态链接."jailbreaking"的行为实际上是在chroot jail外部安装一个程序,然后可以执行fork和将文件保存到磁盘上的其他位置并加载动态代码.
Apple(以及开放的iPhone社区)在手机上运行了大量程序(例如MobilePhone,Mobile Safari和SpringBoard应用程序),可以在后台运行并加载库.它们被放置在磁盘上的不同位置(/ private/var/stash/Applications经常).
所以...如果你想在应用程序商店中销售你的应用程序,你就无法加载动态库.对大多数人来说意味着你根本无法加载它.但是如果你想通过cydia(一个常见的越狱手机应用程序安装程序)分发你的应用程序,那么你可以通过越狱手机和加载你的动态图书馆来逃脱.事实上,由于itunes安装过程是罪魁祸首,正如你所了解的那样,你甚至无法从你自己的应用程序中加载一个你写给自己手机的dylib ......除非你越狱.
RE @mipadi:在Xcode 3.1中删除了ZeroLink,而iPhone SDK则不存在.正确答案是路易斯; iPhone不支持在开发人员创建的应用程序中动态加载的框架.
Xcode确实有一个很好的静态库用户界面; 只需将它们拖入项目中,它们就会被添加到链接阶段.无需对链接器标志大惊小怪.当您需要使用随这些静态库提供的头文件(然后您需要手动添加头部搜索路径)或当静态库与可用的dylib冲突时(当您必须手动添加-l标志时) .