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

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

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

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


person Sagar R. Kothari    schedule 15.09.2009    source источник
comment
Когда вы говорите, что уже добавили его в свой проект, что именно вы сделали? Я не думаю, что XCode думает, что это сработало.   -  person Devin Ceartas    schedule 15.09.2009
comment
если у вас есть эта проблема в XCode 4.6, перейдите сюда stackoverflow.com/questions/14622684/   -  person Boris Gafurov    schedule 22.02.2013
comment
Обновите скриншот.   -  person User    schedule 08.10.2014


Ответы (22)


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

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

Вам нужно добавить 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.

person Matt Ball    schedule 15.09.2009
comment
Не делайте того, что говорится, когда вас просят добавить /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/include/libxml2 в путь поиска заголовков. Вместо этого добавьте /usr/include/libxml2. Это делает ваш проект независимым от конкретных SDK. - person cdespinosa; 16.09.2009
comment
Это работает до тех пор, пока на него действительно есть символическая ссылка в /usr/include. Я не пробовал устанавливать libxml2, поэтому не могу подтвердить поведение по умолчанию. Но да, гораздо лучше связать это таким образом. - person Matt Ball; 16.09.2009
comment
При разработке под XCode GCC использует параметр -isysroot, который перемещает корень SDK. Если вы добавите /usr/include/libxml2 в пути поиска заголовков, он будет переведен во время компиляции в папку usr/include/libxml2 ВНУТРИ текущего SDK. - person Laurent Etiemble; 16.04.2010
comment
Когда я устанавливаю этот $(SDKROOT)/usr/include/libxml2 в путь поиска заголовков (XCode 4.2), он говорит, что _OBJC_METACLASS_$_UIResponder, на который ссылается: _OBJC_METACLASS_$_D2GAppDelegate в MyDemoAppDelegate.o ld: символ(ы) не найден для архитектуры i386. Что я могу сделать? - person NicTesla; 29.04.2012
comment
Здорово. благодаря. мне не хватало «$ (SDKROOT)», что создавало проблемы. - person ; 10.05.2012
comment
не уверен, почему, но мне пришлось добавить это ($(SDKROOT)/usr/include/libxml2) в целевые настройки вместо настроек сборки проекта - person Sourabh Bhardwaj; 26.03.2014

Добавление 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.

В последних двух случаях убедитесь, что путь указан в полях Отладка и Выпуск.

3. Очистить

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

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

person e.w. parris    schedule 05.06.2012
comment
Спасибо, это было единственное решение, которое сработало для меня с Xcode 4.3.3. - person lifjoy; 27.06.2012
comment
Эти пошаговые инструкции были единственными, которые сработали для меня (Xcode 4.4.1). Спасибо! - person Frank; 04.09.2012
comment
У меня работало без установки путей поиска Framework в Xcode 4.1.1 - person Richard Garside; 12.09.2012
comment
Используя Xcode 4.5.1, не устанавливайте путь поиска Framework. Однако решил мою проблему иначе. Я не знаю, что бы я делал без SO. - person Dancreek; 10.10.2012
comment
Я обнаружил это после того, как решил проблему: я переименовал XCode (одновременно имея несколько версий) и включил пробел в имя приложения - цитирование $(SDKROOT) - это то, что исправило это, потому что в противном случае шаг компиляции просто разделил в строке и передал флаги -I для каждой половины. - person misnomer; 18.10.2012
comment
Хотя у меня это не сработало, однако я попросил вас получить подробные инструкции, вы вряд ли найдете их в stackoverflow. У меня XCode4.6 и, видимо, в этой версии вы просто не ставите $(SDKROOT) перед путем, если у вас есть эта проблема, вы просто оставляете это так: /usr/include/libxml2 и это работает только так в XCode 4.6. Как вам эти яблоки. эээ. вот ссылка на сообщение об этом: stackoverflow.com/questions/14622684/ - person Boris Gafurov; 22.02.2013
comment
У меня работает на xCode 4.6.3. Спасибо!! - person capikaw; 25.08.2013
comment
После добавления еще одной настройки, чтобы она работала Всегда искать путь пользователя = YES, тогда это сработало для меня !! - person i_Intiution; 26.11.2013
comment
Извините, но это не работает в Xcode 5.0.2. Я пробовал так же, как и вы. Мне бесполезно. Можешь пожалуйста помочь мне.. - person Ganesh; 09.01.2014
comment
opening import file 'Swift.swift': Not a directory после этого в Xcode 5. - person User; 05.10.2014
comment
О, и я пытаюсь использовать библиотеку Obj-C в Swift. - person User; 05.10.2014
comment
На шаге 2 выберите вкладку Build Settings: И убедитесь, что выбрано ALL, а не Basic, иначе путь поиска пользователя не появится. - person Adriano Spadoni; 11.02.2015
comment
Я также получил ошибку при открытии файла импорта для модуля «Swift»: не каталог. Чтобы это исправить, просто не добавляйте /usr/lib/libxml2.dylib в пути поиска Framework. Все еще работал для меня после того, как я проигнорировал этот шаг. - person Daniel Ryan; 07.05.2015

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

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

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

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

person Andy Shephard    schedule 12.09.2014
comment
Любая причина, по которой /usr/include/libxml2 в настройках проекта НЕ работает? - person Paul Brewczynski; 07.02.2015

Вам также необходимо добавить /usr/include/libxml2 к пути включения.

person Michael Krelin - hacker    schedule 15.09.2009

Сформируйте ссылку @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 
person Sagar R. Kothari    schedule 15.09.2009

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

В XCode нажмите «Проект\Редактировать настройки проекта» и убедитесь, что отмечены «Все конфигурации».

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

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

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

person bennythemink    schedule 02.02.2011
comment
Нашел этот ответ во многих местах, но все они забыли упомянуть, что это путь поиска заголовка в проекте, а не в цели. Большое спасибо за правильное объяснение. - person esbenr; 12.08.2011

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

person Mike    schedule 27.04.2012

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

person S.P.    schedule 25.07.2010

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

person fsharp    schedule 08.04.2012

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

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

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

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

person Legoless    schedule 13.11.2013
comment
Именно то, что я искал. Это работает идеально. Просто убедитесь, что в путях поиска заголовков вы указали /usr/include/libxml2 - person Josh Bernfeld; 14.10.2014

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

person pschang    schedule 29.01.2011

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

person Aqib Mumtaz    schedule 21.01.2013

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

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

person chesterbr    schedule 30.11.2009

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

person Atif    schedule 24.06.2012

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

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

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

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

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

person mandar    schedule 04.07.2012

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

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

person Petr    schedule 01.10.2012

Я нашел это наглядное руководство полезным.

person Frank Fu    schedule 01.11.2012

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

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

Вот как.

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

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

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

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

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

Еще больше.

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

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

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

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

person Denko    schedule 13.10.2013
comment
Это не работает в Xcode 5.0.2. Я внес вышеуказанные изменения в свой проект, но не повезло. Можете ли вы помочь мне, что нужно сделать. - person Ganesh; 09.01.2014

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

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

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

person Ranjan    schedule 13.03.2014

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

Я использую 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. щелкните значок проекта «Настольные испытания» в столбце ресурсов проекта вверху слева.
  7. найдите «Другие флаги компоновщика» в разделе «Настройки сборки»
  8. добавьте «-lxml2» (без «») в «Другие флаги компоновщика» в столбце значка проекта «Bench Test».
  9. найдите «поиск по заголовку» в разделе «Настройки сборки»
  10. добавьте "$(SDKROOT)/usr/include/libxml2" (без "") в "Пути поиска заголовков" в столбце значка проекта "Bench Test"
  11. добавьте "$(SDKROOT)/usr/include/libxml2" (без "") в "Пути поиска пользовательских заголовков" в столбце значка проекта "Bench Test"

Примечания:

  • Мой не будет работать, пока я не добавлю этот путь поиска как в «Пути поиска заголовков», так и в «Пути поиска пользовательских заголовков».
  • Чтобы добраться до 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 для системы медицинских карт... пожалуйста, свяжитесь со мной.

person Cerniuk    schedule 04.01.2015

Я решил в три шага в проекте Xcode 8.0 + Unit Test

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

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

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

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

person Zumry Mohamed    schedule 08.12.2016

Я подумал, что добавил неправильно, но потом понял, что проблема в том, что он не поддерживает дугу, поэтому проверьте поддержку здесь, спасатель жизни -> http://www.michaelbabiy.com/arc-compliant-gdataxml-library

person Bhimbim    schedule 08.06.2017