файл libsndfile на iOS

#c #c #ios #libsndfile

#c #c #iOS #файл библиотеки

Вопрос:

В наши дни я столкнулся со странной проблемой ссылки при попытке использовать libsndfile на iOS :

Я скомпилировал libsndfile на MACOSX 10.6.8 , и он прошел все проверки. Но когда я добавил его в Xcode и попытался скомпилировать iOS , я получил предупреждение о ссылке и ошибках:

 ld: warning: in /Users/chencyz/Desktop/Development/SDK/libsndfile/lib/libsndfile.a, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
  "_sf_close", referenced from:
      SndfileHandle::SNDFILE_ref::~SNDFILE_ref()in AudioReader.o
  "_sf_error", referenced from:
      SndfileHandle::error() const in AudioReader.o
  "_sf_open", referenced from:
      SndfileHandle::SndfileHandle(char const*, int, int, int, int)in AudioReader.o
  "_sf_read_float", referenced from:
      SndfileHandle::read(float*, long long)in AudioReader.o
ld: symbol(s) not found
  

AudioReader это всего лишь простой класс, который использует программный API libsndfile .

Кто-нибудь что-нибудь знает об этом?

Ответ №1:

Кажется, вы не перекомпилировали библиотеку для iOS, вы, похоже, пытаетесь связать с версией библиотеки i386. Первая строка в сообщении об ошибке, которое вы вставили, довольно ясна об этом.

iOS работает на процессорах ARM, поэтому вам нужно создать библиотеку для ARM.

Комментарии:

1. Спасибо 🙂 Теперь я компилирую libsndfile в версию i386, и проблема со связью исчезла, но есть другая проблема:

2. Поскольку libsndfile зависит от libogg, libvorbis и libflac, я должен скомпилировать их все перед компиляцией libsndfile, но когда я скомпилирую их все, я нахожу этот libsndfile. a не включает libogg.a,libvorbis.a (и другие) и libflac.a, поэтому, если я хочу использовать libsndfile в проекте, я должен добавить их все ……

3. Я не совсем уверен в этом, вы что-нибудь знаете об этом?

4. Похоже, проблема в вашем Makefile или файле проекта. Также обратите внимание, что вы сказали, что создаете для i386, это неверно, исполняемые файлы iOS создаются для процессора ARM.

5. Теперь я просто могу встроить библиотеку в версию i386, но когда я пытаюсь встроить библиотеку в версию armv6, я столкнулся с большой проблемой… например, отсутствуют некоторые базовые заголовки C…