【问题标题】:Problems using a library in Xcode在 Xcode 中使用库的问题
【发布时间】:2023-03-08 19:42:01
【问题描述】:

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

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

当我对文件.so使用命令“file”时,为了您的信息,我有: 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 的设备 3.0 进行编译时,我也遇到了同样的错误,但警告却完全不同:
ln /Users/Pablo/MyApp/mylib.a 文件不是必需的架构

我试图解决这个问题并让应用程序从几天开始就可以使用这个库,但我不明白为什么编译器会抱怨......这是 32/64 位问题吗?我该如何处理?

【问题讨论】:

    标签: xcode cocoa linked-list


    【解决方案1】:

    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 手册页了解详情。

    【讨论】:

    • 谢谢,因此我必须要求图书馆的作者使用 MACH 图像重新创建它?没有解决方法,因为作者不支持 Mac OSX?
    • 如果库作者提供源代码,您可以尝试在 Mac OS X 上编译。
    【解决方案2】:

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

    您还需要两个版本,一个用于模拟器 (i386),一个用于设备 (arm..)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多