У меня есть рабочая область с проектом, которая связывается со статическими библиотеками в другом проекте (который также находится в рабочей области). Это проблема в Kobold2D Мне не удалось решить, хотя я понимаю причину и полагаю, что похож на этот вопрос .
Все цели проекта и статические библиотеки имеют конфигурации сборки Debug и Release . Все хорошо.
Теперь кто-то добавляет новую конфигурацию сборки в проект и называет ее, например, Ad-Hoc . Теперь цель проекта создает конфигурацию Ad-Hoc , однако статические библиотеки не имеют такой конфигурации. Очевидно, они тогда по умолчанию строят конфигурацию Release .
В конце, когда компоновщик должен собрать все вместе, происходит сбой:
ld: library not found for -lbox2d-ios
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1
Для принудительно загруженных библиотек через -force_load $(BUILT_PRODUCTS_DIR)/libSomeLib.a
ошибка похожа, но говорит "файл не найден". Следует отметить, что библиотека "libbox2d-ios.a" находится в списке фаз сборки "связать двоичные файлы с библиотеками".
Очевидно, что проблема заключается в том, что компоновщик предполагает, что библиотеки находятся в папке Ad-Hoc-iphoneos в папке BUILT_PRODUCTS_DIR, а на самом деле они находятся в папке Release-iphoneos , поскольку у них нет Ad-Hoc конфигурации сборки.
Как я могу ударить линкера по лицу и сказать ему, чтобы библиотеки были там, где они есть? Предпочтительно, я ищу решение, которое работает в обоих случаях, то есть библиотеки добавили стандартным способом (связать двоичный файл с фазой сборки библиотек) и библиотеки, для работы которых требуется дополнительный параметр -force_load.
Я надеюсь, что есть какой-то способ:
- принудительно помещать библиотеки в папку конфигурации сборки целевого приложения
- запустить сценарий посткомпиляции и предварительной ссылки, который копирует каждую библиотеку в папку конфигурации сборки
- указать относительный путь к библиотекам
- использовать другой макрос, отличный от $ BUILT_PRODUCTS_DIR, для -force_load
- флаг компоновщика типа -WTFmake-all-problem-go-away
Извините, но я должен сказать это ... АРГ! :)