Компиляция libjpeg для iOS

Я пытаюсь скомпилировать проект для iOS 6 в XCode, и я использую следующие заголовки, которые включают в себя необходимые мне функции:

#include "cdjpeg.h"     /* Common decls for cjpeg/djpeg applications */
#include "transupp.h"   /* Support routines for jpegtran */

Это прямо из утилитарных источников jpegtran. Я уже установил библиотеку jpeg, и в моем /usr/local/lib/ есть libjpeg.a. Однако, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке "Неопределенные символы для архитектуры i386" или "Неопределенные символы для архитектуры armv7", в зависимости от того, является ли цель симулятором iPhone или нет. Вот ключевые слова, для которых он не может найти символы:

  "_jpeg_stdio_src"
  "_jpeg_finish_compress"
  "_jcopy_markers_execute"
  "_jpeg_copy_critical_parameters"
  "_jtransform_adjust_parameters"
  "_jpeg_destroy_compress"
  "_jtransform_execute_transform"
  "_jpeg_finish_decompress"
  "_jpeg_read_header"
  "_jtransform_request_workspace"
  "_jpeg_write_coefficients"
  "_jpeg_read_coefficients"
  "_jpeg_destroy_decompress"
  "_jpeg_stdio_dest"
  "_jcopy_markers_setup"

Я сталкивался с отсутствующими ошибками символов и всегда заканчивал тем, что отказывался от использования сторонних библиотек, но в этом конкретном случае пути назад нет.

Что я здесь не так делаю?

РЕДАКТИРОВАТЬ: я добавил libjpeg.a в настройки проекта, и он пошел дальше, но остановился на:

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: i386-apple-darwin12.2.0
Thread model: posix
"lots-of-debug-paths"
ld: library not found for -ljpeg
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2 ответа

Решение

Я не знаю, как вы это скомпилировали. Но вам нужно изменить make install, чтобы скомпилировать его в i386 и armv7. Я уверен, что вы просто запустили make, поэтому он скомпилировал его для вас, mac, который, безусловно, является аркой x84_64, и это, безусловно, не то, что вам нужно

Вы можете проверить с

lipo -info  /usr/local/lib/libjpeg.a // if libjpeg.a is at this path

или же

file /usr/local/lib/libjpeg.a

Я недавно нуждался libjpeg для iOS тоже (как зависимость от сторонней библиотеки)

Я просто использовал http://www.libjpeg-turbo.org/, который поставляется с предварительно скомпилированным толстым двоичным файлом

Architectures in the fat file: libjpeg.dylib are: i386 x86_64 armv6 armv7 armv7s arm64 
Другие вопросы по тегам