【问题标题】:How to use jpeglib in xCode如何在 xCode 中使用 jpeglib
【发布时间】:2012-11-03 20:49:35
【问题描述】:

我正在开发一个 iPhone 应用程序,但我对一切都很陌生。我正在开发 Mountain Lion OS X 10.8 并使用 xCode v4.5。我的项目需要 JPEG 处理能力,并且我想使用 libjpeg (http://www.ijg.org/) 库。我尝试了几种不同的方法,但有点天真,我不确定如何开始。下载软件包后,我通常使用 ./configure;制作并安装。现在我在(/usr/local/include)下有(jconfig.h,jerror.h,jmorecfg.h,jpeglib.h),在(/usr/local/lib)下有(libjpeg.a,libjpeg.la)但是我不知道如何在我的 xCode 项目中链接/使用它。 任何人都可以将我链接到教程或向我推动正确的方向吗? 如果有人成功安装和使用 jpeg 库,请帮助..

【问题讨论】:

    标签: iphone ios xcode libjpeg


    【解决方案1】:

    这有点麻烦,因为您需要为两种架构编译 LibJPEG:ARM 用于 iOS,x86 用于模拟器。

    1. 最好的办法是使用NSImageCGImage。 iOS 上已经有 JPEG 库,系统自带,所以不需要使用 LibJPEG。

    2. 另一种方法是将 LibJPEG 源直接放入您的项目中(包括 *.c 文件)。这样,它们将针对不同的架构(模拟和部署)正确构建。

    3. 您也可以只为 ARM 构建,然后忘记运行模拟器。

    4. 或者您可以将 LibJPEG 构建为胖二进制文件,方法是编译两次并将每次编译的结果库 (libjpeg.a) 与 libtool 组合。

      libtool -static path/to/arm/libjpeg.a path/to/x86/libjpeg.a -o libjpeg.a
      

    您可以看到为什么建议使用NSImageCGImage。最好使用已安装的库,而不是尝试构建和安装新库。

    如何制作胖静态库

    因为听起来您想以艰难的方式做事,所以这里有一个示例,说明如何为 i386 和 ppc 架构构建胖静态库。这是在 PowerPC OS X 机器上完成的,如果要为 ARM 和 i386 编译,则必须进行调整。

    请注意,您必须指定 --host--build 才能进行交叉编译。下面的值对于我的计算机是正确的,但我确定它们对于您的计算机是错误的。

    $ cd jpeg-8d $ mkdir build-ppc build-i386 $ cd 构建-ppc $ ../configure CFLAGS='-arch ppc -O2 -g' LDFLAGS='-arch ppc' \ --enable-static --disable-shared $使-j2 $ cd ../build-i386 $ ../configure CFLAGS='-arch i386 -O2 -g' LDFLAGS='-arch i386' \ --启用-静态--禁用-共享\ --build=powerpc-apple-darwin9.8.0 --host=i386-apple-darwin9.8.0 $使-j2 $ 光盘 .. $ 文件 build-ppc/.libs/libjpeg.a build-ppc/.libs/libjpeg.a:当前 ar 存档随机库 $ 文件 build-i386/.libs/libjpeg.a build-i386/.libs/libjpeg.a:当前 ar 存档随机库 $ libtool -static build-*/.libs/libjpeg.a -o libjpeg.a $ 文件 libjpeg.a libjpeg.a:具有 2 个架构的 Mach-O 通用二进制文件 libjpeg.a(用于架构 i386):当前 ar 存档随机库 libjpeg.a(用于架构 ppc):当前 ar 存档随机库

    【讨论】:

    • 我的目标是进行 DCT 系数操作以隐藏 JPEG 图像中的一些数据。我不确定我是否可以只使用 NSImage 或 CGImage 来做到这一点。我需要该库在 ARM 和模拟器中工作。我将尝试将 LibJPEG 源直接复制到我的项目中,因为它看起来是最简单的方法,但我是否也必须包含 (libjpeg.a) ?此外,根据 filelist.txt,在安装过程中会生成一些头文件(jconfig.h 和 jmorecfg.h);我该怎么办?
    • libjpeg.a 文件不应被复制,因为它不是源代码,它是编译后的库。是的,您需要复制 jconfig.h 和 jmorecfg.h。
    • 我尝试将头文件和源文件直接复制到我的项目中,但内存头文件出现很多错误。我也不确定是否需要分发中的所有其他文件(例如 *.lo)。如果我像您所说的那样将 libJPEG 构建为胖二进制文件可能会更好。你能解释一下怎么做吗?
    • @Samar:请注意,您现在正在以艰难的方式做事。如果您不确定需要哪些文件,那么这项任务可能会超出您的范围。我已经更新了答案,但这就是我要去的地方。
    • @DietrichEpp :我有类似的问题。我正在使用包含 libjpeg 源的第三方代码。它为设备构建良好,但为模拟器提供“未找到架构 i386 的符号”错误。 “_jpeg_gen_optimal_table 引用自 jcphuff.o 中的 _finish_pass_gather_phuff”为我的项目的其余部分工作,所以不确定我做错了什么)谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2011-09-06
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多