Кошмар статической библиотеки из ада - программирование
Подтвердить что ты не робот

Кошмар статической библиотеки из ада

Это точка. У меня есть подпроект (статическая библиотека). Библиотека хорошо компилируется. Нет ошибок. Когда я включаю эту библиотеку внутри проекта и импортирую заголовок из этой библиотеки в проекте, библиотека не скомпилируется, потому что не может найти путь, который принадлежит самому себе.

После того, как после нескольких учебных пособий в Интернете о том, как создать статическую библиотеку и внедрить ее в проект, я не знаю, какой из них правильный, потому что я пробовал все и все не удалось, а некоторые отличаются.

Вот как устанавливается библиотека:


СТАТИЧЕСКАЯ БИБЛИОТЕКА

СТРОИТЕЛЬНЫЕ НАСТРОЙКИ:

  • Общий путь к папке заголовка = $(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"

Я потерял два дня, пытаясь решить этот кошмар.

любые мысли?

Я загрузил образец проекта в здесь и здесь

4b9b3361

Ответ 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 hereenter image description here

Теперь, когда было два заголовка cocos2d.h и MyStaticLibrary.h, cocos2d.h был успешно импортирован, хотя он будет иметь дополнительную зависимость.

Путь ../MyStaticLibrary/build/$(BUILD_STYLE)-$(PLATFORM_NAME) также (рекурсивно) будет иметь публичные заголовки библиотеки.

Ответ 5

Пожалуйста, попробуйте это...

step1: щелкните правой кнопкой мыши по "projectName.xcodeproj" (статическая библиотека). Выберите "Получить информацию" и скопируйте полный путь из (General- > where)

step2: Вставить полный путь в "Пути поиска заголовков" для вашего основного проекта (оба целевых объекта и проекта)