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


100

Я отримую наступні помилки.

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

Я вже додав libxml2.dylibсвій проект, однак у мене виникають такі проблеми. Будь ласка, допоможи мені.


2
Коли ти кажеш, що ти вже додав його до свого проекту, що саме ти робив? Я не думаю, що XCode вважає, що це спрацювало.
Devin Ceartas

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

Оновіть свій скріншот.
Користувач

Відповіді:


213

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

Налаштування файлу проекту

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

Оскільки libxml2 - це .dylib (не дуже приємна .framework), у нас ще є ще одна справа. Перейдіть до налаштувань збірки проекту (Project-> Edit Settings Project-> Build) та знайдіть «Шляхи пошуку». У "Шляхи пошуку в заголовку" додайте такий шлях:

$(SDKROOT)/usr/include/libxml2

Також дивіться відповідь ОП .


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.
Лоран Етьембл

Коли я встановлюю цей "$ (SDKROOT) / usr / include / libxml2" на Шлях пошуку заголовка (XCode 4.2), він говорить про те, що "" _OBJC_METACLASS _ $ _ UIResponder ", посилається на: _OBJC_METACLASS _ $ _ D2GAppDelegate в MyDemoAppdelegate: (ів) не знайдено для архітектури 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.

У цих останніх двох випадках переконайтеся, що введено шлях у налагодження та випуск.

3. Чистий

Під Productменю виберіть Clean.

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


Дякую, це єдине рішення, яке працювало для мене з Xcode 4.3.3
lifjoy

1
Ці покрокові інструкції були єдиним, хто працював для мене (Xcode 4.4.1). Дякую!
Френк

Працював для мене, не встановлюючи шляхи пошуку Framework в Xcode 4.1.1
Richard Garside,

1
opening import file 'Swift.swift': Not a directoryпісля цього в Xcode 5.
Користувач

1
Також я отримав помилку "відкриття імпортного файлу для модуля" Swift ": Не каталог". Щоб виправити це, просто не додайте "/usr/lib/libxml2.dylib" до "Шлях пошуку рамки". Все ще працював на мене після того, як я проігнорував цей крок.
Даніель Райан

22

Для Xcode 6 мені довелося зробити наступне:

1) додати бібліотеку "libxml2.dylib" до цілі мого проекту (фази збірки -> посилання бінарних із бібліотеками)

2) додайте "$ (SDKROOT) / usr / include / libxml2" до Шляхів пошуку заголовків на TARGET (Налаштування збірки -> Шляхи пошуку заголовка)

Після цього ціль повинна успішно будуватися.


Будь-яка причина, чому / usr / include / libxml2 у налаштуваннях проекту НЕ працює?
Пол Бревчинський


11

Створіть посилання @Matt Ball,

Я знайшов наступні корисні для мене.

Вам потрібно додати libxml2.dylib до свого проекту (не розміщуйте його в розділі Frameworks). На Mac ви знайдете його на /usr/lib/libxml2.dylibiPhone, а для 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

У Рея Вендерліха є повідомлення в блозі про використання гдата, яка вирішує цю проблему. В основному ці прості кроки:

У XCode натисніть Проект \ Редагувати параметри проекту та переконайтесь, що "Усі конфігурації" встановлено.

Знайдіть налаштування Шляхів пошуку \ Заголовок Шляхів пошуку та додайте / usr / include / libxml2 до списку.

Нарешті, знайдіть розділ Зв’язування \ Інші прапорці Linker та додайте -lxml2 до списку.

оригінальна публікація: читати та писати xml документи за допомогою gdataxml


2
Цю відповідь знайшли у багатьох місцях, але всі вони забули згадати, що це шлях пошуку Header у проекті, а не в ціль. Велике спасибі за те, що це правильно пояснили.
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 відсутній . Половина відповідей тут застаріла, оскільки додаток не збиратиметься, доки ви не розіб’єте каталог з включенням.

Я вирішив проблему, створивши символьне посилання на 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
Josh Bernfeld

3

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


3

На гірському Леві я зіткнувся з тією ж проблемою, яку було вирішено, додавши, /usr/include/libxml2щоб включити доріжки із прапором "рекурсивні", використовувати це, якщо все вище не є плідним.


2

У мене виникла ця проблема, коли я знову відкрив проект (розроблений на XCode 3.something на Leopard) після оновлення до Snow Leopard та XCode 3.2. Досить цікаво, це вплинуло лише на деякі види збірок (збірки емуляторів вийшли нормально, пристрої дали мені помилку). І у мене є libxml2 в / usr / include, і він дійсно містить libxml / tree.h.

Навіть магія "Очистити" не спрацювала, але "Порожні кеші ..." в меню "XCode" (між логотипом Apple і File) зробили трюк (чи було це меню в попередніх версіях?). Бій мене за причину, але після чистої не було більше скарг щодо 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 до моїх шляхів пошуку заголовків проектів та шляхів пошуку в заголовку користувача . Після цього проект будується успішно.

EDIT: У мене в проекті Google GData (званий MyProject) (мій проект використовується). GData вимагає libxml. Щоб успішно створити проект MyProject, я додаю "$ (SDK_DIR)" / usr / include / libxml2 в Шляхи пошуку заголовків MyProject, а не в Шляхи пошуку заголовків GData . Якщо я не додав його до MyProject, проект не будувався ).



1

Блок-котирування Додавання libxml2 у Xcode 4.3.x

Додавання libxml2 - це великий, жирний, вибагливий біль у попці. Якщо ви збираєтеся це зробити, зробіть це ще до того, як ви занадто далеко задумаєтесь над створенням свого проекту.

Ось як.

Налаштування цілей

Клацніть на вашу ціль (не ваш проект) та виберіть "Фази побудови". Клацніть на трикутник розкриття під назвою «Пов’язати бінарне з бібліотеками». Клацніть на "+", щоб додати бібліотеку. Прокрутіть до нижньої частини списку та виберіть "libxml2.dylib". Це додає бібліотеку libxml2 2 до вашого проекту ... але зачекайте.

Налаштування проекту

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

Виберіть вкладку "Параметри побудови". Прокрутіть униз до розділу "Зв'язування". Під стовпцями вашого проекту двічі клацніть рядок "Інші прапорці". Клацніть "+" та додайте "-lxml2" до списку.

Ще більше.

На цій же вкладці прокрутіть униз до розділу "Шляхи пошуку". У стовпці вашого проекту в рядку "Рамкові шляхи пошуку" додайте "/usr/lib/libxml2.dylib".

У рядок "Шляхи пошуку заголовків" ТА "Шляхи пошуку заголовків користувачів" додайте "$ (SDKROOT) / usr / include / libxml2". У цих останніх двох випадках переконайтеся, що введено шлях у Налагодження І Випуск.

Тоді. У меню "Продукт" виберіть "Очистити".

Це працює і для Xcode5 теж! Дякую!


1
Це не працює в Xcode 5.0.2. Я вніс зміни до свого проекту, але не пощастило. Чи можете ви допомогти мені, що потрібно зробити.
Ганеш

1

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

Потім натисніть на проект (верхній лівий синій значок), перейдіть до "Налаштування збірки", у полі пошуку введіть "Шляхи пошуку заголовків", а потім додайте цей "$ (SDKROOT) / usr / include / libxml2"

Цей код вирішує мою проблему, сподіваюся, що це допоможе вам виправити це


1

@Aqib Mumtaz - я працював над цим, дотримуючись інструкцій у примітці Парріса вище під назвою "Додавання libxml2 в Xcode 4.3 / 5/6". Крок використання траєкторії рамкового пошуку не працює, і компілятор скаржиться. Все одно великі кудо!

Я використовую Xcode 6.2b3

Незалежно від версії Xcode, яку ви використовуєте, вона баггі. Не завжди вважайте, що помилки компіляції справжні. Існує багато разів, коли він не дотримується шляхів пошуку в заголовку і включає чітко перелічені списки. Гірше, що помилки, що призводять до цього, як правило, вказують на вас у різні сторони, тому ви витрачаєте багато часу, курячи навколо, відволікаючись. З урахуванням сказаного ...

Рекомендуйте кроки дитини, починаючи саме з цього…:

  1. створити єдине вікно проекту для какао Mac OS X під назвою "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" (sans "") до "Інші прапорці Linker" у стовпці піктограми "Bench Test" проекту
  9. шукайте "пошук у заголовку" у розділі "Налаштування збірки"
  10. додайте "$ (SDKROOT) / usr / include / libxml2" (sans "") у "Шляхи пошуку заголовків" у стовпці піктограми "Bench Test" проекту
  11. додайте "$ (SDKROOT) / usr / include / libxml2" (sans "") у "Шляхи пошуку в заголовку користувача" у стовпці піктограми проекту "Bench Test"

Примітки:

  • Шахта не буде працювати, поки я не додав цей шлях пошуку до "Шляхів пошуку заголовків" та "Шляхів пошуку заголовків користувачів".
  • Щоб потрапити на libxml2.2.dylib у пошуку, вам потрібно буде клацнути правою кнопкою миші значок Xcode і вибрати "Показати контакти пакета" (редакція: що хак .. набиваючи все те сміття в додаток)
  • Будьте готові змінити пов'язаний libxml2.2.dylib. Той, що знаходиться всередині Xcode , навмисно використовується для того, щоб Xcode отримав щось, про що він знає, і теоретично було перевірено. Пізніше ви можете використовувати dylib в системі (читайте в цій темі)
  • Оскільки я використовую Xcode 6.2b3, у мене може бути новіший libxml2.2.dylib. Твоє можна назвати дещо іншим. Просто знайдіть у папці те, що починається з "libxml" і закінчується ".dylib", і це повинно бути. Також може бути псевдонім на зразок "libxml2.dylib". Не використовуйте це відразу, оскільки рішення псевдоніма додає ще одну змінну в рівняння Xcode "що може мати помилки".
  • Заради здоровості я роблю псевдоніми зовнішніх бібліотек, перейменую їх, щоб вказати, якою вони є, і зберігаю їх на тому ж рівні, що і файл проекту у Finder. Якщо вони змінять місцеположення, змінять ім’я та ін., Псевдонім матиме в ньому «Інформація про отримання», повний шлях оригінального файлу для подальшої детективної роботи, щоб знову скомпілювати та зв’язати проект. (символьні посилання виходять з ладу занадто легко і не є природними для Mac)
  • Останнє, і дуже важливо, див. Http://www.cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html, де можна завантажити XpathQuery і отримати ще трохи користі.

сподіваюся, що це допомагає.

Якщо ви щось розробляєте для ветеранів, скажіть, додаток для iPhone / iPad або Mac, і ви працюєте проти чогось, що називається "MDWS" або "VIA", що є інтерфейсом на основі SOAP до системи медичних записів ..., будь ласка, зв'яжіться зі мною


0

Я вирішив за три етапи inXcode 8.0 + Unit Test Project

1) Я додав файл libxml до фаз збірки. Перейдіть за цим посиланням

2) Я додав інші прапорці Linker як -ObjC(Як для цілей проекту, так і для тестових проектів)

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

Один з них вирішить питання. Якщо ні, то вам не доведеться застосувати всі три вищезгадані.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.