#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…