0

我有一个与 iOS 一起使用的库,它适用于 iPhone 模拟器和设备。当我在库上运行 file 命令时,我得到:

libXXX.a (for architecture armv6):  current ar archive random library
libXXX.a (for architecture i386):   current ar archive random library

现在我想为我的 OSX 应用程序使用相同的库。我将架构设置为 32 位 i386。但是我得到一些编译错误:

Undefined symbols for architecture i386:
  ".objc_class_name_RTMPClient", referenced from:
      pointer-to-literal-objc-class-name in AppDelegate.o

我不确定该错误是否是因为库最初是为 iOS 开发的(标头都有我必须删除的 UIKit 引用,但似乎无关紧要,因为没有 UI 功能.. 它只是一个用于打开/连接到 RTMP 服务器的库) -- 还是链接错误?一般来说,您可以将为 iPhone 开发的 i386 架构库与 Mac 应用程序一起使用吗?

4

1 回答 1

1

好的,你对你的术语有点困惑。

IOS:

应用程序主要使用适用于 ARM 架构的 iOS 设备的 Foundation 和 UIKit 框架构建。i386 是模拟器,它针对一组私有 Xcode 框架构建以使其“正确”运行。静态库必须针对两者进行编译并捆绑到“通用二进制包”中,以便它们可以在两个平台上运行。

操作系统:

应用程序是在 i386 架构的 Cocoa 和 Appkit 中构建的。但是,它们没有链接到相同的 Xcode 框架,因此它们不能在 iOS 设备上运行,必须在 OS X 环境中执行。

要使框架“完全与设备无关”,必须为每种硬件编译一个库并将它们捆绑在一起。

所以这一个链接器错误,因为您将 RTMPClient 文件作为库的一部分包含在内,但它是为错误的架构编译的,或者不是“通用的”。

于 2012-06-03T04:11:20.827 回答