您是否可以将任何带有i386架构的库用于Cocoa / Mac OSX应用程序?

时间:2012-06-03 03:55:22

标签: objective-c ios macos cocoa ios-simulator

我有一个与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服务器) - 或者它是一个链接错误? 一般来说,您可以使用为Mac应用程序开发的i386架构库吗?

1 个答案:

答案 0 :(得分:1)

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

IOS:

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

OS X:

应用程序内置于Cocoa和Appkit中,适用于i386架构。但是,它们链接到那些相同的Xcode框架,因此它们不能在iOS设备上运行,并且必须在OS X环境中执行。

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

因此 是一个链接器错误,因为您将RTMPClient文件包含在库的一部分中,但它是针对错误的体系结构编译的,或者不是“通用的”。