libxml / tree.h нет такого файла или каталога


100

Я получаю следующие ошибки.

libxml / tree.h нет такого файла или каталога

Я уже добавил libxml2.dylibв свой проект, но у меня возникают такие проблемы. Пожалуйста, помогите мне.


2
Когда вы говорите, что уже добавили его в свой проект, что именно вы сделали? Я не думаю, что XCode считает, что это сработало.
Девин Сеартас,

1
если у вас есть эта проблема в XCode 4.6, перейдите сюда stackoverflow.com/questions/14622684/…
Борис Гафуров,

Обновите свой скриншот.
Пользователь

Ответы:


214

Следуйте инструкциям здесь , в разделе «Настройка файла проекта».

Настройка файла проекта

Вам необходимо добавить libxml2.dylib в свой проект (не помещайте его в раздел Frameworks). На Mac вы найдете эту версию, /usr/lib/libxml2.dylibа для iPhone вам понадобится эта /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/lib/libxml2.dylibверсия.

Поскольку libxml2 - это .dylib (не очень удобный .framework), у нас есть еще одна вещь, которую нужно сделать. Перейдите в настройки сборки проекта (Проект-> Изменить настройки проекта-> Сборка) и найдите «Пути поиска». В «Пути поиска заголовков» добавьте следующий путь:

$(SDKROOT)/usr/include/libxml2

Также см . Ответ OP .


12
Не делайте того, что там написано, когда вас просят добавить "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/include/libxml2" в путь поиска заголовка. Вместо этого добавьте / usr / include / libxml2. Это сделает ваш проект независимым от конкретных SDK.
cdespinosa,

Это работает до тех пор, пока на него есть символическая ссылка /usr/include. Я не пробовал устанавливать libxml2, поэтому не могу подтвердить поведение по умолчанию. Но да, лучше так связать.
Мэтт Болл,

1
При разработке под XCode GCC использует параметр -isysroot, который перемещает корень SDK. Если вы добавите / usr / include / libxml2 в пути поиска заголовка, он будет переведен во время компиляции в папку usr / include / libxml2 ВНУТРИ текущего SDK.
Laurent Etiemble

Когда я устанавливаю этот "$ (SDKROOT) / usr / include / libxml2" на путь поиска заголовка (XCode 4.2), то он говорит, что "" _OBJC_METACLASS _ $ _ UIResponder ", на который ссылается: _OBJC_METACLASS _ $ _ D2GAppDelegate в MyDemoAppDelegate: (s) не найдено для архитектуры i386 ". Что я могу сделать?
NicTesla

1
Отлично. Спасибо. мне не хватало «$ (SDKROOT)», что создавало проблемы.

86

Добавление libxml2 в Xcode 4.3 / 5/6

Добавление libxml2 - это большая, жирная и привередливая заноза в заднице. Если вы собираетесь это сделать, сделайте это, прежде чем вы зайдете слишком далеко в создании своего проекта.


Добавить нужно двумя способами :

1. Целевые настройки

Щелкните цель (не проект) и выберите Build Phases.

Щелкните раскрывающийся треугольник с названием Link Binary With Libraries. Нажмите, +чтобы добавить библиотеку.

Прокрутите список до конца и выберите libxml2.dylib. Это добавляет в ваш проект библиотеку libxml2.

2. Настройки проекта

Теперь вам нужно еще три раза указать вашему проекту, где его искать .

Выберите файл Build Settings tab.

Прокрутите вниз до Linkingраздела. Под столбцами ваших проектов дважды щелкните Other Linker Flagsстроку. Щелкните +и добавьте -lxml2в список.

Еще больше.

На той же вкладке прокрутите вниз до Search Pathsраздела.

Под вашими проектами столбец в Framework Search Pathsстроке добавьте /usr/lib/libxml2.dylib.

В Header Search Paths и в User Header Search Pathsстроке дополнения $(SDKROOT)/usr/include/libxml2.

В этих двух последних случаях убедитесь, что путь введен в Debug and Release.

3. Чистый

В Productменю выберите Clean.

Тогда, если бы я был вами (и давайте смотреть правде в глаза, вероятно, я), я бы вышел из Xcode и ушел. Когда вы вернетесь и запустите, все будет в порядке.


Спасибо, это было единственное решение, которое сработало для меня с Xcode 4.3.3
lifjoy

1
Эти пошаговые инструкции были единственными, которые у меня сработали (Xcode 4.4.1). Спасибо!
Фрэнк

Работал для меня без установки путей поиска Framework в Xcode 4.1.1
Ричард Гарсайд,

1
opening import file 'Swift.swift': Not a directoryпосле выполнения этого в Xcode 5.
Пользователь

1
Я также получил ошибку «открытие файла импорта для модуля Swift: Not a directory». Чтобы исправить это, просто не добавляйте «/usr/lib/libxml2.dylib» в «Пути поиска фреймворка». У меня все еще работало после того, как я проигнорировал этот шаг.
Дэниел Райан

22

Для Xcode 6 мне пришлось сделать следующее:

1) добавить библиотеку libxml2.dylib в мой проект TARGET (Фазы сборки -> Связать двоичный файл с библиотеками)

2) добавьте «$ (SDKROOT) / usr / include / libxml2» в пути поиска заголовков на ЦЕЛИ (Настройки сборки -> Пути поиска заголовков)

После этого цель должна быть успешно построена.


Любая причина, по которой / usr / include / libxml2 в настройках проекта НЕ работают?
Пол Брючинский,


11

Сформируйте ссылку на @Matt Ball,

Я нашел следующие полезные для меня.

Вам необходимо добавить libxml2.dylib в свой проект (не помещайте его в раздел Frameworks). На Mac вы найдете эту версию, /usr/lib/libxml2.dylibа для iPhone вам понадобится эта /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libxml2.dylibверсия.

Поскольку libxml2 - это .dylib (не очень удобный .framework), у нас есть еще одна вещь, которую нужно сделать. Зайдите в настройки сборки проекта ( Project->Edit Project Settings->Build) и найдите " Search Paths". В «Пути поиска заголовков» добавьте следующий путь на Mac:

 /usr/include/libxml2 

11

У Рэя Вендерлиха есть сообщение в блоге об использовании gdata, которое решает эту проблему. В основном это простые шаги:

В XCode щелкните Project \ Edit Project Settings и убедитесь, что отмечены «Все конфигурации».

Найдите параметр Search Paths \ Header Search Paths и добавьте / usr / include / libxml2 в список.

Наконец, найдите раздел Linking \ Other Linker Flags и добавьте -lxml2 в список.

исходное сообщение: чтение и запись XML-документов с помощью gdataxml


2
Нашел этот ответ во многих местах, но все они забыли упомянуть, что это путь поиска заголовка в проекте, а не в цели. Большое спасибо за правильное объяснение.
esbenr

7

Я нашел то же самое, мне пришлось добавить $ (SDKROOT) / usr / include / libxml2 для последней версии Xcode (4.3.x). ТАКЖЕ, что заставляло меня кружиться часами, так это то, что я изменял «TARGET», а не «PROJECT» (новый пользовательский интерфейс Xcode настолько сложен, что его легко упустить из виду). Вам необходимо модифицировать ПРОЕКТ!


5

Другое решение. выполните все шаги в пути поиска заголовка и т.д. и убедитесь, что выбранная вами конфигурация в проекте в настройках проекта правильная. Когда вы дважды щелкаете настройки сборки проекта, вы можете изменить настройки распространения, но вы пытаетесь добавить путь поиска заголовка в настройках «Отладка». Поэтому убедитесь, что вы выбрали правильные настройки. или выберите все настройки


4

Я обнаружил, что в xCode 4.3.2 мне пришлось ввести $ (SDKROOT) / usr / include / libxml2 в поле поиска по заголовку, а не просто / usr / include / libxml2


4

Начиная с Mavericks (OS X 10.9) каталог / usr / include отсутствует . Половина ответов здесь устарела, поскольку приложение не будет компилироваться, пока вы не отсортируете каталог include.

Я решил проблему, создав символическую ссылку на MacOSX SDK в терминале, используя следующую команду:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include /usr/include

Приложение снова компилируется.


Именно то, что я искал. Это отлично работает. Просто убедитесь, что в пути поиска в заголовке вы указали / usr / include / libxml2
Джош Бернфельд,

3

Я не уверен, в чем разница, но добавьте путь включения к проекту, а также цель.


3

На Mountain Lion я столкнулся с той же проблемой, которая была решена путем добавления /usr/include/libxml2путей включения с флагом «рекурсивный», используйте это, если все вышеперечисленное не принесло результатов.


2

У меня возникла эта проблема, когда я повторно открыл проект (который был разработан на XCode 3.something на Leopard) после обновления до Snow Leopard и XCode 3.2. Как ни странно, это повлияло только на некоторые виды сборок (сборки эмуляторов прошли нормально, сборки устройств дали мне ошибку). И у меня есть libxml2 в / usr / include, и он действительно содержит libxml / tree.h.

Даже волшебная «Очистка» не сработала, но «Очистить кеши ...» в меню «XCode» (между логотипом Apple и файлом) помогло (было ли это меню в предыдущих версиях?). Поражает меня причина, но после чистки больше не было жалоб на libxml / tree.h


2

Также выберите «Всегда искать пути пользователя» на ДА. В XCode 4.3.3 по умолчанию НЕТ


2

Пожалуйста, выполните следующие шаги

  1. Добавление libxml2
    libxml2.dylib можно найти на вашем компьютере Mac по адресу /usr/lib/libxml2.dylib

  2. Измените «Пути поиска заголовков».
    Нажмите [Название проекта] (на левой панели) -> Проект -> Настройки сборки -> Выбрать все (по умолчанию - Базовый).
    Введите Пути поиска заголовков в поле поиска.
    Дважды щелкните Пути поиска заголовков -> + - > "$ (SDKROOT) / usr / include / libxml2"

  3. Добавьте -lxml2 в «Другой флаг компоновщика».
    Найдите «Другие флаги компоновщика» в качестве поиска на шаге 2 и
    щелкните строку «Другие флаги компоновщика». Нажмите «+» и добавьте в список «-lxml2».

  4. Измените тип проекта на ARC -> Нет, т. Е. Автоматический подсчет ссылок на Нет. Вы можете выполнить поиск в ARC согласно шагу 2.


2

Xcode 4.5 Я полностью использовал решение CW. Единственным исключением является то, что $ (SDKROOT) / usr / include / libxml2 у меня не работает, и мне пришлось добавить «$ (SDK_DIR)» / usr / include / libxml2 в пути поиска заголовков проектов и пути поиска заголовков пользователей. . После этого проект успешно строится.

РЕДАКТИРОВАТЬ: у меня есть проект Google GData внутри моего проекта (называемого MyProject) (мой проект использует). GData требует libxml. Чтобы успешно построить проект MyProject, я добавляю "$ (SDK_DIR)" / usr / include / libxml2 в пути поиска заголовков MyProject и нет в пути поиска заголовков GData . Если я не добавил его в MyProject, проект не был создан ).



1

Blockquote Добавление libxml2 в Xcode 4.3.x

Добавление libxml2 - это большая, жирная и привередливая заноза в заднице. Если вы собираетесь это сделать, сделайте это до того, как зайдете слишком далеко в создании своего проекта.

Вот как.

Целевые настройки

Щелкните цель (не свой проект) и выберите «Фазы сборки». Щелкните раскрывающийся треугольник с названием «Связать двоичный файл с библиотеками». Нажмите «+», чтобы добавить библиотеку. Прокрутите список до конца и выберите «libxml2.dylib». Это добавляет библиотеку libxml2 2 в ваш проект… но подождите.

Настройки проекта

Теперь вам нужно еще три раза указать вашему проекту, где его искать.

Выберите вкладку «Настройки сборки». Прокрутите вниз до раздела «Связывание». Под столбцами вашего проекта дважды щелкните строку «Другие флаги компоновщика». Нажмите «+» и добавьте в список «-lxml2».

Еще больше.

На той же вкладке прокрутите вниз до раздела «Пути поиска». В столбце вашего проекта в строке «Пути поиска фреймворка» добавьте «/usr/lib/libxml2.dylib».

В «Пути поиска заголовков» И в строке «Пути поиска заголовков пользователей» добавьте «$ (SDKROOT) / usr / include / libxml2». В последних двух случаях убедитесь, что путь введен в Debug AND Release.

Затем. В меню «Продукт» выберите «Очистить».

Это работает и для Xcode5! Спасибо!


1
Это не работает в Xcode 5.0.2. Я внес указанные выше изменения в свой проект, но безуспешно. Можете ли вы помочь мне в том, что нужно сделать?
Ганеш

1

Не помещайте libxml2.dylib в папку frameworks, поместите его под корень чуть ниже корня (синий значок вверху слева)

Затем нажмите на проект (синий значок вверху слева), перейдите к настройкам сборки, в поле поиска введите «Пути поиска заголовков» и затем добавьте этот «$ (SDKROOT) / usr / include / libxml2»

Этот код решает мою проблему, надеюсь, он поможет вам исправить это


1

@Aqib Mumtaz - Я заставил его работать, следуя инструкциям в примечании Парриса выше, озаглавленном «Добавление libxml2 в Xcode 4.3 / 5/6». Шаг с использованием пути поиска Framework не работает, и компилятор жалуется. В любом случае, большая честь этому парню!

Я использую Xcode 6.2b3

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

Порекомендуйте детские шаги, начав именно с этого ...:

  1. создать проект Mac OS X Cocoa с одним окном под названием «Bench Test»
  2. добавьте XpathQuery в исходный каталог вашего проекта прямо в Finder
  3. щелкните значок крошечной папки под красной кнопкой закрытия окна проекта
  4. перетащите XpathQuery (папка, если она у вас есть) в активы проекта слева от окна проекта
  5. перетащите /Applications/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libxml2.2.dylib в ресурсы вашего проекта внизу. Это добавит его в ваши «Фазы сборки» -> «Связать двоичный файл с библиотеками» простым способом.
  6. щелкните значок проекта «Bench Test» в столбце ресурсов проекта вверху слева
  7. найдите «Другие флаги компоновщика» в «Настройках сборки»
  8. добавьте "-lxml2" (без "") в "Другие флаги компоновщика" в столбце значка проекта "Бенч-тест"
  9. выполните поиск по запросу "поиск по заголовку" в разделе "Настройки сборки"
  10. добавьте "$ (SDKROOT) / usr / include / libxml2" (sans "") в "Пути поиска заголовков" под столбцом значка проекта "Тестирование"
  11. добавьте "$ (SDKROOT) / usr / include / libxml2" (sans "") в "Пути поиска заголовков пользователей" в столбце значка проекта "Бенч-тест"

Ноты:

  • Мой не будет работать, пока я не добавлю этот путь поиска в «Пути поиска заголовков» и «Пути поиска заголовков пользователей».
  • Чтобы перейти к libxml2.2.dylib в поисковике, вам нужно будет щелкнуть правой кнопкой мыши значок Xcode и выбрать «Показать контакты пакета» (редакционная статья: что за хак ... втиснуть весь этот мусор в приложение)
  • Будьте готовы изменить связанный libxml2.2.dylib. Тот, что внутри Xcode , преднамеренно используется, чтобы гарантировать, что Xcode получит то, о чем он знает и теоретически был протестирован. Вы можете позже использовать dylib в системе (читайте в этой теме)
  • Поскольку я использую Xcode 6.2b3, у меня может быть более новый libxml2.2.dylib. Ваш может быть назван немного иначе. Просто найдите в папке что-то, что начинается с «libxml» и заканчивается на «.dylib», и это должно быть все. Также может быть псевдоним, например "libxml2.dylib". Не используйте это сразу, так как разрешение псевдонима добавляет еще одну переменную в уравнение Xcode «что может иметь ошибки».
  • Ради здравого смысла я создаю псевдонимы внешних библиотек, переименовываю их, чтобы указать, какие они есть, и держу их на том же уровне, что и файл проекта в Finder. Если они изменят местоположение, изменит имя и т. Д., Псевдоним будет содержать в нем Get Info, полный путь к исходному файлу для дальнейшей детективной работы по компиляции проекта и повторной компоновке. (символические ссылки ломаются слишком легко и неестественны для Mac)
  • Последнее и очень важное, см. Http://www.cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html, где вы можете загрузить XpathQuery и получить еще немного добра.

надеюсь это поможет.

Если вы разрабатываете что-то для ветеранов, скажем, приложение для iPhone / iPad или Mac, и работаете с чем-то под названием «MDWS» или «VIA», которые представляют собой интерфейсы на основе SOAP для системы медицинских записей ... пожалуйста, свяжитесь со мной


0

Я решил за три шага в Xcode 8.0 + Unit Test Project

1) Я добавил файл libxml в этапы сборки. Перейдите по этой ссылке

2) Я добавил другие флаги компоновщика как-ObjC (для целей проекта и тестового проекта)

3) Я настраиваю путь поиска заголовка как"${SDKROOT}/usr/include/libxml2" (не забывайте двойные кавычки с обеих сторон) (для целей проекта и тестового проекта)

Один из них решит вопрос. Если нет, вам нужно применить все три из вышеперечисленных.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.