Кошмар статической библиотеки из ада
Это точка. У меня есть подпроект (статическая библиотека). Библиотека хорошо компилируется. Нет ошибок. Когда я включаю эту библиотеку внутри проекта и импортирую заголовок из этой библиотеки в проекте, библиотека не скомпилируется, потому что не может найти путь, который принадлежит самому себе.
После того, как после нескольких учебных пособий в Интернете о том, как создать статическую библиотеку и внедрить ее в проект, я не знаю, какой из них правильный, потому что я пробовал все и все не удалось, а некоторые отличаются.
Вот как устанавливается библиотека:
СТАТИЧЕСКАЯ БИБЛИОТЕКА
СТРОИТЕЛЬНЫЕ НАСТРОЙКИ:
- Общий путь к папке заголовка =
$(BUILT_PRODUCTS_DIR)
- Путь поиска заголовка =
$(SRCROOT)
(рекурсивный)
СТРОИТЕЛЬНЫЕ ФАЗЫ
COPY FILES = 1 файл, myLibrary.h, который в основном пуст (создается xcode, когда я использовал шаблон статической библиотеки для запуска библиотеки.
no ADD COPY HEADERS фаза
ГЛАВНЫЙ ПРОЕКТ
СТРОИТЕЛЬНЫЕ НАСТРОЙКИ
- Путь поиска заголовка = пустой
- Путь поиска заголовка пользователя =
$(BUILT_PRODUCTS_DIR)
(рекурсивный)
- Всегда искать пути пользователя =
YES
СТРОИТЕЛЬНЫЕ ФАЗЫ
- Да,
myLibrary.a
находится на целевых зависимостях
Что меня поражает, так это то, что библиотека компилируется в одиночку, но когда она помещается внутри проекта, не удается найти заголовок, принадлежащий собственной библиотеке.
ПРИМЕЧАНИЕ. Я также попытался создать фазу заголовков копий в библиотеке, опубликовав все .h
в этой библиотеке, но тоже не удалось.
Это пример одной ошибки:
/Users/mike/Library/Developer/Xcode/DerivedData/MyApp-dnaimaovscreasadhmvgttwjnabc/Build/Products/Debug-iphoneos/include/myLibrary/ccTypes.h:39:9:
fatal error: 'Platforms/CCGL.h' file not found
#import "Platforms/CCGL.h"
Я потерял два дня, пытаясь решить этот кошмар.
любые мысли?
Я загрузил образец проекта в здесь и здесь
Ответы
Ответ 1
После почти пяти дней кошмара, пытающегося решить эту проблему, я наконец нашел этот урок: http://www.youtube.com/watch?v=XUhLETxgcoE
Это единственное решение, которое сработало для меня. Самый простой и лучший.
Спасибо за каждого, кто пытается это решить.
Ответ 2
После загрузки вашего образца проекта я работал в течение нескольких минут, внеся следующие изменения.
Сначала вам нужно добавить запись для целевых настроек сборки MyProject
в разделе "Пути поиска заголовков", чтобы файлы, такие как HelloWorldLayer.h
, которые #import "cocos2d.h"
, знали, где найти этот файл.
В Header Search Paths
я ввел ../MyStaticLibrary/MyStaticLibrary/libs/**
, как показано на рисунке ниже:
![enter image description here]()
Это решило проблему неспособности препроцессора найти необходимые исходные файлы из MyStaticLibrary
для проекта MyProject
, но после компиляции я получил ошибку о недостающих символах. Мне нужно было добавить построенный libMyStaticLibrary.a
к шагу Link Binary With Libraries
, как показано на рисунке ниже:
![enter image description here]()
После этого проект компилируется отлично.
Ответ 3
(Недостаточно репутации для публикации комментариев...)
Пробовал ли вы конкретно включать каталог Platforms в путь поиска заголовка? Предположительно, Платформы находятся в исходном каталоге, а не в $(BUILT_PRODUCTS_DIR), поэтому не могут быть найдены в вашей текущей настройке.
Ответ 4
Что касается script, чтобы показать вам переменные env, вот как я это делаю (открывайте изображения на новой вкладке для лучшего масштабирования):
- Добавлена фиктивная оболочка script
![enter image description here]()
- Соблюдайте его вывод в Log Navigator
![enter image description here]()
![enter image description here]()
![enter image description here]()
Как вы можете видеть, BUILT_PRODUCTS_DIR
не имеет заголовков, скопированных из библиотеки. Либо поставьте туда заголовки вручную (настоятельно не рекомендуется), либо добавьте путь поиска к тому месту, где вы знаете, что заголовки должны быть:
![enter image description here]()
![enter image description here]()
Теперь, когда было два заголовка cocos2d.h
и MyStaticLibrary.h
, cocos2d.h
был успешно импортирован, хотя он будет иметь дополнительную зависимость.
Путь ../MyStaticLibrary/build/$(BUILD_STYLE)-$(PLATFORM_NAME)
также (рекурсивно) будет иметь публичные заголовки библиотеки.
Ответ 5
Пожалуйста, попробуйте это...
step1: щелкните правой кнопкой мыши по "projectName.xcodeproj" (статическая библиотека). Выберите "Получить информацию" и скопируйте полный путь из (General- > where)
step2: Вставить полный путь в "Пути поиска заголовков" для вашего основного проекта (оба целевых объекта и проекта)