Почему не найдены заголовки статической библиотеки?

StackOverflow https://stackoverflow.com/questions/1095452

Вопрос

Я использовал Учебное пособие Клинта Харриса настроить совместное использование кода между проектами, и на моем компьютере все работает так, как ожидалось.Но на компьютере моего коллеги, похоже, компилятор не находит заголовочный файл из проекта статической библиотеки при сборке.

Мой коллега получил мой проект, клонировав репозиторий git.Мы проверили все соответствующие флаги сборки и настройки XCode n раз, но проект просто отказывается компилироваться на его компьютере.

Это то, что я попросил сделать своего коллегу, в основном скопированное и вставленное из руководства:

  1. Убедитесь, что в полном пути к каталогу проектов нет пробелов.
  2. Внутри каталога проектов создайте еще одну папку под названием "build_output".
  3. В XCode в разделе “XCode > Настройки" выберите вкладку "Сборка" и установите для параметра “Размещать проекты сборки в” значение “Настраиваемое расположение” и укажите путь к созданному вами общему каталогу сборки.
  4. Установите для параметра “Размещать промежуточные файлы сборки в” значение “С продуктами сборки”.
  5. Выберите вкладку “Исходные деревья” и создайте новую переменную исходного дерева, нажав на кнопку “+” и заполнив столбцы.Как в "Имя настройки", так и в "Отображаемое имя" введите [имя общего проекта, который создал статическую библиотеку].В поле path вы указываете полный путь к папке framework.

Следуя этим шагам, проект, использующий статическую библиотеку, должен скомпилировать на своем компьютере то же самое, что и на моем.Но это не так.По сути, ошибка, которую он получает, такова:

error: TheFrameworkHeader.h: No such file or directory

а затем строка других ошибок, вызванных отсутствующим заголовком.

Есть какие-нибудь стратегии по устранению неполадок в этом?Или кто-нибудь, у кого был подобный опыт и кто мог бы поделиться некоторыми с трудом заработанными знаниями?Чего-нибудь не хватает в инструкциях, которые я кратко изложил?Нужно ли мне устанавливать роли заголовков на этапе сборки Copy Headers при компиляции статической библиотеки?

Это было полезно?

Решение

Несмотря на некоторые полезные советы, я так и не разобрался в этом, но вот немного информации для тех, кто оказался в подобной ситуации.Я создал библиотеку и зависимый проект, разделив исходный проект на два.Сначала библиотека и приложение были всего лишь двумя целями в рамках одного проекта.Позже я перенес приложение в отдельный проект.Казалось, все заработало, и я перенес оба проекта в удаленные репозитории git.Однако, когда они были клонированы на других компьютерах, заголовки библиотеки найдены не были.

Позже я обнаружил, что та же ошибка возникла, когда я клонировал проекты на исходном компьютере.После долгих усилий я свел все к одной пугающей детали: имя папки зависимого проекта! (То есть проект с приложением, а не библиотека.) Не имя пакета .xcodeproject, не идентификатор приложения, а имя содержащая папка.Как только я это изменю, все заработает.Если я верну ему исходное имя (на любом компьютере), заголовки снова не будут найдены.

Если у кого-то есть какое-либо представление об этом, пожалуйста, опубликуйте ответ!

Редактировать:С тех пор как я опубликовал это, та же проблема возникла с другим проектом, и опять же, простое переименование папки, содержащей папку .xcodeproject, устранило проблему.

Другие советы

Я не думаю, что это Git, я думаю, что это xcode.У меня здесь очень похожая проблема, где xcode / xcodebuild ложно разрешает путь включения (что делает его простым.) С точно такой же библиотекой project и файлами xcconfig (чистая проверка из svn repo), но с другой папкой, содержащей файлы - это работает.Итак, спасибо за решение и больше не вините Git ;-)

Я часто забываю проверить это:вы уверены, что отсутствующий файл (т.е. "frameworkheader.h") находится в репозитории git?Вполне возможно, что ваши настройки сборки верны, но файл каким-то образом не был добавлен в git корректно.

Если у вас возникли проблемы при сборке на конкретном компьютере, то проблема, скорее всего, связана с настройками компьютера или пользователя.Например , переменная среды (возможно, INCLUDE_PATH или один из его родственников - XCode использует GCC).У вас может быть "." в одной из этих переменных.

Лучшим способом исправить это было бы добавить необходимый путь к папке к параметру -I в скрипте сборки.

Дважды проверьте, что параметр сборки "Пути поиска-> Пути поиска пользовательского заголовка" (для всех конфигураций) указывает на каталог, содержащий общий проект Xcode (вы можете использовать новую созданную вами переменную дерева исходных текстов).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top