4

我尝试在 iphone 上集成 Picasa API,编译正常,但我在启动时看到以下错误。

dyld:库未加载:@loader_path/../Frameworks/GData.framework/Versions/A/GData 引用自:/Users/jacksu/Library/Application Support/iPhone Simulator/User/Applications/9A7E3F54-022F-4771-BD6A -E458F5545144/PicasaTest.app/PicasaTest 原因:找不到图片

我不确定可能是什么问题。

我从 Source/build/Debug/GData.framework 导入了 GDataFramework。我已经在 Source 目录下构建了项目。

4

3 回答 3

3

iPhone 不允许加载动态库。您使用的外部库/框架必须构建为静态库并在构建时编译到您的应用程序中。

为了首先实现这一点,您需要创建 GDATA 的静态库版本:

  • 将新目标添加到 GData 项目(例如 GDataIPhoneLibrary)

    • 您可以通过右键单击目标并选择“添加新目标”来执行此操作。在对话框中,从 IPhoneOS - Cocoa Touch 部分中选择静态库模板。
  • 然后您需要将源 .m 文件拖到目标的 Compile Sources 部分。(确保不要拖动 .h 文件,否则您会收到警告。)此外,如果您只是为 Picasa 构建,那么命令和照片组下的文件就足够了。也不要添加单元测试和测试工具组。

  • 接下来进入项目下的 Frameworks and Libraries 组,添加 Foundation 框架,这是 Cocoa Touch 的必要框架。当您添加它时,请确保仅检查您新创建的目标以供使用。(你不想弄乱 Mac 版的 GData)

  • 现在在 Targets 下,选择您创建的 GDataIPhoneLibrary 并单击 (i) 按钮(或直接双击它)

  • 在 Build 选项卡下搜索“header”,找到“Header Search Paths”后,添加以下内容(对于 libxml2)作为标题路径

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.1.sdk/usr/include/libxml2

  • 现在关闭对话框。

  • 选择您的活动目标作为 GDataIPhoneLibrary

  • 将您的 ActiveSDK 设置为 Project-> SetActiveSDK -> Simulator - iPhone OS 2.1

  • 现在你准备好了 -> 只需点击构建,你将拥有默认的 libGDataIPhoneLibrary.a 文件。

现在您可以将此静态库添加到您的 iPhone 应用程序中:

  • 转到您自己的应用程序项目并选择目标(您可能有一个)并双击它以打开对话框。

  • 在“构建”选项卡中搜索“库”,找到“库搜索路径”后,将路径添加到您刚刚在上一步中构建的库。

  • 然后将“-lGDataIPhoneLibrary”(省略 lib 前缀和 .a 扩展名)添加到“Other Linker Flags”选项(您可以通过在搜索框中搜索链接器来找到该选项。

现在这应该有望建立。希望这对你有用。

干杯,凯雷姆

于 2008-10-30T02:21:29.103 回答
3

如果您保留 GData.framework,那么您需要确保它不是必需的框架,而是一个弱框架。弱框架意味着,应用程序在首次启动时不需要它,并且仅在引用对框架的函数调用时才尝试加载它,但在您的情况下,由于库是静态编译的,因此调用的函数将在不需要的情况下被解析加载框架。(注意目标 C 消息是运行时的函数调用......)

为此,请尝试以下操作:

  • 双击您的应用程序目标(如前所述)

  • 这次看看General标签

  • 找到 GData.framework 并将其从“必需”更改为“弱”

您可能会在不添加框架的情况下遇到编译错误,因为没有解析 GDATA 头文件。您还可以在“头文件搜索路径”中放置指向“头文件”的链接,而不需要添加框架。

与上述无关,我之前忘记了一件事情。将 -ObjC 添加到您的“其他链接器标志”中。

于 2008-10-30T06:45:13.843 回答
2

您不能在 iPhone 上使用动态库(当然,在 Apple 的框架之外)。所有库都必须静态链接。

于 2008-10-30T01:37:27.693 回答