【问题标题】:iphone simulator: "libpng.dylib, file is not of required architecture"iphone 模拟器:“libpng.dylib,文件不是必需的架构”
【发布时间】:2009-11-27 02:09:22
【问题描述】:

我正在尝试将 libpng 库链接到我的 iphone 应用程序,并收到此错误:

ld: warning: in /opt/local/lib/libpng.dylib, file is not of required architecture

当我为模拟器或设备构建时会发生这种情况。

但是,当我构建控制台应用程序时,我可以很好地链接到 libpng。

我做错了什么? iphone 开发需要使用不同的 libpng.dylib 吗?

【问题讨论】:

    标签: iphone linker libpng


    【解决方案1】:

    你不能在 iPhone 上使用 dylibs,你需要静态编译它。话虽如此,您看到的错误是单独的问题。

    您是否正在使用 Snow Leopard 进行开发?如果是这样,那么您构建的默认库可能是 64 位的。模拟器需要 32 位库。您可以通过运行文件来检查它:

    file /opt/local/lib/libpng.dylib
    

    如果您没有看到类似的内容:

    (for architecture i386):    Mach-O dynamically linked shared library i386
    

    那么您将无法重复使用它。将该库重建为静态 i386 库,您应该可以在模拟器中使用它。如果它是基于 autoconf 的构建,this 博客文章解释了如何进行构建,并有你可以使用的 shell 脚本。

    【讨论】:

    • 谢谢!我在 Snow Leopard 上,我的 libpng 确实是 64 位的。我什至没有想到这一点。现在这一切都变得更有意义了。
    【解决方案2】:

    正如 Chris Long 所说,libpng 在 iphone 上不可用。您可以将它编译到您的项目中(如果它会为 ARM 编译),否则它没有工作。 这是一条线索:http://www.cloudgoessocial.net/2009/06/09/imagemagick-on-iphone-with-jpeg-png/

    另外,为了记录,您可以使用以下方式将 UIImage 原生地写为 png:UIImagePNGRepresentation(UIImage *image)

    【讨论】:

    • 该链接有一个包含 i386 和 arm 架构的 libpng.a,这正是我所需要的。不幸的是,当我使用该文件时,它仍然给我与上述相同的错误,甚至引用了我从项目中删除的“/opt/local/lib/libpng.dylib”。
    【解决方案3】:

    这是你从网上下载的libpng.dylib吗? iPhone 开发者不得使用外部动态库。

    我不知道 libpng 是否可用,但这里是如何检查。

    1. 在“目标”列表中双击您的应用名称。
    2. 单击框架列表下的加号按钮并尝试找到它。不要忘记小写的名字出现在“Z”之后。

    如果它不存在,您将无法使用它。尝试找到一个静态库并从源代码编译它。它必须专门针对 iPhone Simulator (Intel) 和 iPhone (ARM) 的架构进行编译。

    【讨论】:

    • 是从macports安装的libpng.dylib。我也尝试过静态链接,但没有成功。 Libpng 不在可用框架列表中。
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多