У меня есть рабочее пространство с проектом, который связан со статическими библиотеками в другом проекте (который также находится в рабочем пространстве). Это проблема в Kobold2D Мне не удалось решить, хотя я понимаю причину, и я предполагаю, что она похожа на этот вопрос.
Все цели проекта и статические библиотеки имеют конфигурации сборки Debug и Release. Все хорошо.
Теперь кто-то добавляет новую конфигурацию сборки в проект и называет ее, например, Ad-Hoc. Теперь цель проекта создает конфигурацию Ad-Hoc, однако статические библиотеки не имеют такой конфигурации. Очевидно, они тогда по умолчанию строят конфигурацию версии.
В конце, когда компоновщик должен собрать все воедино, происходит сбой:
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, поскольку у них нет Специальная конфигурация сборки.
Как я могу ударить линкер по лицу и сказать ему, чтобы получить библиотеки, где они находятся? Предпочтительно, я ищу решение, которое работает в обоих случаях, то есть библиотеки добавили стандартный способ (связать двоичный файл с фазой сборки библиотек) и библиотеки, которым для работы требуется дополнительный -force_load.
Я надеюсь, что есть какой-то способ:
- принудительно помещать библиотеки в папку конфигурации сборки целевого приложения
- запустить посткомпиляцию & скрипт предварительной ссылки, который копирует каждую библиотеку в папку конфигурации сборки
- указать относительный путь к библиотекам
- используйте другой макрос, отличный от $ BUILT_PRODUCTS_DIR для -force_load
- флаг компоновщика, такой как -WTFmake-all-tasks-go-away
Извините, но я должен сказать это... АРГ! :)