Если вы связались с библиотекой .a
, вы уже связали статически. Вам не нужно отправлять .a
библиотеки. Это просто пучки объектов.
EDIT: Ваша ошибка наводит на мысль, что вы ссылаетесь на dylib, а не .a. Если у вас есть libfoo.dylib
и libfoo.a
в вашем пути к библиотеке, даже если вы скажете «link libfoo.a
» в Xcode, и даже если libfoo.a
ранее на пути поиска, он по-прежнему свяжет libfoo.dylib
. Это связано с тем, что соединение Xcode полностью сломано и передает -lfoo
компоновщику (вы никогда не должны использовать -l
для чего-то, что вы создали и имеете точный путь). Я всегда рекомендую связывать библиотеки, которые вы создали в файле LDFLAGS
, в файле xcconfig, а не с помощью панели построения. Вы передаете точный путь, который хотите, а не используете -l
. См. Abandoning the Build Panel для моих размышлений о xcconfig. Теперь он устарел, поскольку он был написан для Xcode3, но основы все еще применяются.
Используя панель построения, вы также можете передать весь путь к библиотеке в разделе «Другие флаги компоновщика». Но это все еще имеет проблемы с панелью построения.
Более быстрое (но менее надежное) решение иногда добавляет -Wl,-search_paths_first
в раздел «Другие флаги компоновщика». Это изменяет поведение, так что каждый путь библиотеки ищет как .dylib
, так и .a
перед тем, как продолжить (поведение по умолчанию - это поиск по всему миру за .dylib
и только затем поиск .a
). Поэтому, если ваш .a
находится в другом каталоге от вашего .dylib
, и этот каталог находится ранее в пути поиска, это будет работать.
Этот вопрос, наконец, заставил меня открыть radar, что я должен был сделать много лет назад. Я рекомендую другим открыть duplicates.
Это то, что я думал, хотя при попытке запустить приложение на другом компьютере приложение не запускается и появляется ошибка, говорящая о том, что он не может найти соответствующий .dylib-файл. Должны ли файлы .a быть связаны с проектом где-то еще, кроме как в разделе «Связывание с библиотеками»? –
«Используя панель построения, вы также можете передать весь путь в библиотеку в« Другие флаги компоновщика ». Это решило проблему. Спасибо! –