我正在尝试将 libpng 库链接到我的 iphone 应用程序,并收到此错误:
ld: warning: in /opt/local/lib/libpng.dylib, file is not of required architecture
当我为模拟器或设备构建时会发生这种情况。
但是,当我构建控制台应用程序时,我可以很好地链接 libpng。
我究竟做错了什么?我需要使用不同的 libpng.dylib 进行 iphone 开发吗?
你不能在 iPhone 上使用 dylibs,你需要静态编译它。话虽如此,您看到的错误是单独的问题。
你是在雪豹上开发吗?如果是这样,那么您构建的默认库可能是 64 位的。模拟器需要 32 位库。您可以通过运行文件来检查它:
file /opt/local/lib/libpng.dylib
如果你没有看到类似的东西:
(for architecture i386): Mach-O dynamically linked shared library i386
那么你将无法重复使用它。将该库重建为静态 i386 库,您应该可以在模拟器中使用它。如果它是基于 autoconf 的构建,则此博客文章解释了如何进行构建并具有您可以使用的 shell 脚本。
这是你从网上下载的libpng.dylib吗?iPhone 开发者不得使用外部动态库。
我不知道 libpng 是否可用,但这里是如何检查。
如果它不存在,您将无法使用它。尝试找到一个静态库并从源代码编译它。它必须专门针对 iPhone Simulator (Intel) 和 iPhone (ARM) 的架构进行编译。
正如 Chris Long 所说,libpng 在 iPhone 上不可用。您可以将它编译到您的项目中(如果它会为 ARM 编译),否则它没有工作。这是一个线索:http ://www.cloudgoessocial.net/2009/06/09/imagemagick-on-iphone-with-jpeg-png/
此外,作为记录,您可以使用以下方式将 UIImage 原生地写为 png:UIImagePNGRepresentation(UIImage *image)