在Xcode中使用库的问题

时间:2010-06-02 06:38:11

标签: xcode cocoa linked-list

我实际上正在为iPhone开发一个应用程序,我需要使用一个最初专用于Linux环境的库。由于我使用的是Mac(使用Snow Leopard和Intel Core Duo),我想我可以在我的应用中使用这个库。

我的库有3个文件:文件.h,文件.a和文件.so(.a和.so都在/ Developer / usr / lib中)。另外我已经包含了.h i nmy代码,并且我在XCode中添加了.a有一个框架(并且它起作用,因为XCode找到.so编译)。

当我使用命令“file”作为文件.so时的信息,我有: ELF 32位LSB共享对象,Intel 80386,版本1(SYSV),动态链接,未剥离

当我为Xcode Simulator编译时,我有一个警告和一个错误。
警告是:

  

在/Developer/usr/lib/mylib.so中,为不受支持的文件构建了文件   文件格式不是被链接的体系结构(i386)

错误是: “_mylib_fct”,引自:

  


- [MyAppAppDelegate applicationDidBecomeActive:] in   MyAppAppDelegate.o
未找到符号
Collect2:ld返回1   退出状态

当我使用架构arm6编译Device 3.0时,我也有同样的错误,但警告却完全不同:
ln /Users/Pablo/MyApp/mylib.a文件不是必需的架构

我尝试解决这个问题并让应用程序使用这个lib几天,我不明白为什么编译器抱怨...它是32/64位问题吗?我该如何处理?

2 个答案:

答案 0 :(得分:2)

Mac OS X与Linux的二进制兼容。它无法加载ELF图像,也无法共享相同的ABI。 它只能加载MACH图像,例如:

file /usr/lib/libcrypto.dylib 
[..]
/usr/lib/libcrypto.dylib (for architecture i386):   Mach-O dynamically linked shared library i386

阅读 dlopen 手册页以获取详细信息。

答案 1 :(得分:1)

AFAIK如果Mac OS与特定Linux版本不是二进制兼容的,则该库不应在您的项目中使用。

此外,您还需要两个版本,一个用于模拟器(i386),另一个用于设备(​​手臂......)。