libxml / tree.h keine solche Datei oder kein solches Verzeichnis

100

Ich erhalte folgende Fehler.

libxml / tree.h keine solche Datei oder kein solches Verzeichnis

Ich habe libxml2.dylibmein Projekt bereits erweitert , bekomme jedoch solche Probleme. Bitte hilf mir.

Sagar R. Kothari
quelle
2
Was genau haben Sie getan, wenn Sie sagen, dass Sie es bereits zu Ihrem Projekt hinzugefügt haben? Ich glaube nicht, dass XCode glaubt, dass es funktioniert hat.
Devin Ceartas
1
Wenn Sie dieses Problem in XCode 4.6 haben, gehen Sie hier stackoverflow.com/questions/14622684/…
Boris Gafurov
Aktualisieren Sie Ihren Screenshot.
Benutzer

Antworten:

213

Befolgen Sie die Anweisungen hier unter "Einrichten Ihrer Projektdatei".

Einrichten Ihrer Projektdatei

Sie müssen Ihrem Projekt libxml2.dylib hinzufügen (nicht in den Abschnitt Frameworks einfügen). Auf dem Mac finden Sie es auf /usr/lib/libxml2.dylibund für das iPhone möchten Sie die /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/lib/libxml2.dylib Version.

Da libxml2 eine .dylib ist (kein nettes freundliches .framework), haben wir noch eine Sache zu tun. Gehen Sie zu den Projekterstellungseinstellungen (Projekt-> Projekteinstellungen bearbeiten-> Erstellen) und suchen Sie die "Suchpfade". Fügen Sie unter "Header-Suchpfade" den folgenden Pfad hinzu:

$(SDKROOT)/usr/include/libxml2

Siehe auch die Antwort des OP .

Matt Ball
quelle
12
Tun Sie nicht, was darin steht, wenn Sie aufgefordert werden, "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/include/libxml2" zum Header-Suchpfad hinzuzufügen. Fügen Sie stattdessen "/ usr / include / libxml2" hinzu.
Dies
Das funktioniert nur, solange es tatsächlich einen Symlink dazu gibt /usr/include. Ich habe nicht versucht, libxml2 zu installieren, daher kann ich das Standardverhalten nicht bestätigen. Aber ja, es ist viel besser, es so zu verknüpfen.
Matt Ball
1
Bei der Entwicklung unter XCode verwendet GCC die Option -isysroot, mit der das Stammverzeichnis des SDK verschoben wird. Wenn Sie / usr / include / libxml2 in die Header-Suchpfade einfügen, wird es zur Kompilierungszeit in den Ordner usr / include / libxml2 INNERHALB des aktuellen SDK übersetzt.
Laurent Etiemble
Wenn ich dieses "$ (SDKROOT) / usr / include / libxml2" auf den Header-Suchpfad (XCode 4.2) setze, heißt es, dass "" _OBJC_METACLASS _ $ _ UIResponder ", referenziert von: _OBJC_METACLASS _ $ _ D2GAppDelegate in MyDemoAppdelegate (s) für Architektur i386 nicht gefunden ". Was kann ich tun?
NicTesla
1
Toll. Vielen Dank. Mir fehlte '$ (SDKROOT)', was zu Problemen führte.
86

Hinzufügen von libxml2 in Xcode 4.3 / 5/6

Das Hinzufügen von libxml2 ist ein großer, fetter, pingeliger Schmerz im Arsch. Wenn Sie es tun wollen, tun Sie es, bevor Sie beim Erstellen Ihres Projekts zu weit kommen.


Sie müssen es auf zwei Arten hinzufügen :

1. Zieleinstellungen

Klicken Sie auf Ihr Ziel (nicht auf Ihr Projekt) und wählen Sie Build Phases.

Klicken Sie auf das Dreieck mit dem Titel Link Binary With Libraries. Klicken Sie auf +, um eine Bibliothek hinzuzufügen.

Scrollen Sie zum Ende der Liste und wählen Sie libxml2.dylib. Dadurch wird die libxml2-Bibliothek zu Ihrem Projekt hinzugefügt.

2. Projekteinstellungen

Nun müssen Sie Ihr Projekt sagen , wo es suchen drei weitere Male.

Wählen Sie die Build Settings tab.

Scrollen Sie nach unten zum LinkingAbschnitt. Doppelklicken Sie unter den Spalten Ihres Projekts auf die Other Linker FlagsZeile. Klicken Sie auf +und fügen Sie -lxml2der Liste hinzu.

Immer noch mehr.

Scrollen Sie auf derselben Registerkarte nach unten zum Search PathsAbschnitt.

Fügen Sie unter Ihrer Projektspalte in der Framework Search PathsZeile hinzu /usr/lib/libxml2.dylib.

In der Header Search Paths und der User Header Search PathsZeile hinzufügen $(SDKROOT)/usr/include/libxml2.

Stellen Sie in den letzten beiden Fällen sicher, dass der Pfad in Debug and Release eingegeben wurde .

3. Reinigen

Wählen Sie im ProductMenü die Option Clean.

Wenn ich Sie wäre (und seien wir ehrlich), würde ich Xcode beenden und weggehen. Wenn Sie zurückkommen und starten, sollten Sie bereit sein zu gehen.

ew parris
quelle
Danke, dies war die einzige Lösung, die für mich mit Xcode 4.3.3 funktioniert hat
Lebensfreude
1
Diese Schritt-für-Schritt-Anleitung war die einzige, die bei mir funktioniert hat (Xcode 4.4.1). Vielen Dank!
Frank
Arbeitete für mich ohne die Framework-Suchpfade in Xcode 4.1.1
Richard Garside
1
opening import file 'Swift.swift': Not a directorydanach in Xcode 5.
Benutzer
1
Ich habe auch die Fehlermeldung "Importdatei für Modul 'Swift' öffnen: Kein Verzeichnis" erhalten. Um dies zu beheben, fügen Sie "/usr/lib/libxml2.dylib" nicht zu "Framework Search Paths" hinzu. Arbeitete immer noch für mich, nachdem ich diesen Schritt ignoriert hatte.
Daniel Ryan
22

Für Xcode 6 musste ich Folgendes tun:

1) Fügen Sie die Bibliothek "libxml2.dylib" zum TARGET meines Projekts hinzu (Build Phases -> Link Binary With Libraries).

2) Fügen Sie "$ (SDKROOT) / usr / include / libxml2" zu den Header-Suchpfaden im TARGET hinzu (Build-Einstellungen -> Header-Suchpfade)

Danach sollte das Ziel erfolgreich erstellt werden.

Andy Shephard
quelle
Gibt es einen Grund, warum / usr / include / libxml2 in den Projekteinstellungen NICHT funktioniert?
Paul Brewczynski
19

Sie müssen auch /usr/include/libxml2Ihren Include-Pfad hinzufügen .

Michael Krelin - Hacker
quelle
11

Bilden Sie den Link von @Matt Ball,

Ich fand folgendes hilfreich für mich.

Sie müssen Ihrem Projekt libxml2.dylib hinzufügen (nicht in den Abschnitt Frameworks einfügen). Auf dem Mac finden Sie es auf /usr/lib/libxml2.dylibund für das iPhone möchten Sie die /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libxml2.dylibVersion.

Da libxml2 eine .dylib ist (kein nettes freundliches .framework), haben wir noch eine Sache zu tun. Gehen Sie zu den Projekterstellungseinstellungen ( Project->Edit Project Settings->Build) und suchen Sie das " Search Paths". Fügen Sie unter "Header-Suchpfade" den folgenden Pfad auf dem Mac hinzu:

 /usr/include/libxml2 
Sagar R. Kothari
quelle
11

Ray Wenderlich hat einen Blog-Beitrag über die Verwendung von GDATA, der dieses Problem löst. Grundsätzlich diese einfachen Schritte:

Klicken Sie in XCode auf Projekt \ Projekteinstellungen bearbeiten und stellen Sie sicher, dass "Alle Konfigurationen" aktiviert ist.

Suchen Sie die Einstellung Suchpfade \ Header-Suchpfade und fügen Sie der Liste / usr / include / libxml2 hinzu.

Suchen Sie schließlich den Abschnitt Linking \ Other Linker Flags und fügen Sie -lxml2 zur Liste hinzu.

Originalbeitrag: XML-Dokumente mit gdataxml lesen und schreiben

bennythemink
quelle
2
Ich habe diese Antwort an vielen Stellen gefunden, aber alle haben vergessen zu erwähnen, dass es sich um den Header-Suchpfad im Projekt handelt, nicht im Ziel. Vielen Dank für die richtige Erklärung.
Esbenr
7

Ich fand das gleiche, ich musste $ (SDKROOT) / usr / include / libxml2 für den neuesten Xcode (4.3.x) hinzufügen. AUCH was mich stundenlang im Kreis gehalten hat, ist die Tatsache, dass ich das "ZIEL" und nicht das "PROJEKT" geändert habe (die neue Benutzeroberfläche von Xcode ist so kompliziert, dass es leicht zu übersehen ist). Sie müssen das PROJEKT ändern!

Mike
quelle
5

Eine andere Lösung. Führen Sie alle Schritte im Header-Suchpfad usw. aus und stellen Sie sicher, dass Ihre ausgewählte Konfiguration im Projekt in den Projekteinstellungen korrekt ist. Wenn Sie auf Einstellungen für die Projekterstellung doppelklicken, ändern Sie möglicherweise die Verteilungseinstellungen. Sie versuchen jedoch, den Header-Suchpfad in den "Debug" -Einstellungen hinzuzufügen. Stellen Sie also sicher, dass Sie die richtigen Einstellungen vorgenommen haben. oder wählen Sie alle Einstellungen

SP
quelle
4

Ich fand heraus, dass ich mit xCode 4.3.2 $ (SDKROOT) / usr / include / libxml2 in das Feld Headersuche eingeben musste und nicht einfach / usr / include / libxml2

fsharp
quelle
4

Ab Mavericks (OS X 10.9) das Verzeichnis / usr / include ist verschwunden . Die Hälfte der Antworten hier ist veraltet, da die Anwendung erst kompiliert wird, wenn Sie das Include-Verzeichnis sortieren.

Ich habe das Problem beim Erstellen einer symbolischen Verknüpfung zum MacOSX SDK im Terminal mit dem folgenden Befehl gelöst:

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

Die Anwendung wird jetzt erneut kompiliert.

Legoless
quelle
Genau das, wonach ich gesucht habe. Das funktioniert perfekt. Stellen Sie einfach sicher, dass Sie in Ihren Header-Suchpfaden / usr / include / libxml2
Josh Bernfeld
3

Ich bin mir nicht sicher, was der Unterschied ist, aber füge den Include-Pfad zum Projekt sowie zum Ziel hinzu.

pschang
quelle
3

Auf Mountain Lion hatte ich das gleiche Problem, das durch Hinzufügen /usr/include/libxml2von Pfaden mit der Flagge "rekursiv" behoben wurde. Verwenden Sie diese Option, wenn alle oben genannten Punkte nicht fruchtbar sind.

Aqib Mumtaz
quelle
2

Ich hatte dieses Problem, als ich nach dem Upgrade auf Snow Leopard und XCode 3.2 ein Projekt (das auf XCode 3.something on Leopard entwickelt wurde) erneut öffnete. Seltsamerweise betraf es nur einige Arten von Builds (Emulator-Builds gingen in Ordnung, Geräte-Builds gaben mir den Fehler). Und ich habe libxml2 unter / usr / include und es enthält tatsächlich libxml / tree.h.

Sogar das magische " Reinigen " funktionierte nicht, aber "Leere Caches ..." unter dem Menü "XCode" (zwischen dem Apple-Logo und Datei) hat den Trick gemacht (war dieses Menü in früheren Versionen vorhanden?). Schlägt mich den Grund, aber nach einer Reinigung gab es keine Beschwerden mehr bezüglich libxml / tree.h

chesterbr
quelle
2

Wählen Sie außerdem "Immer nach Benutzerpfaden suchen" bis JA. In XCode 4.3.3 ist standardmäßig NO

Atif
quelle
2

Bitte folgen Sie den folgenden Schritten

  1. Das Hinzufügen von libxml2
    libxml2.dylib finden Sie auf Ihrem Mac-Machin unter /usr/lib/libxml2.dylib

  2. "Header-Suchpfade" ändern
    Klicken Sie auf [Projektname] (im linken Bereich) -> Projekt -> Build-Einstellungen -> Alle auswählen (Standard ist Standard).
    Geben Sie Header-Suchpfade in das Suchfeld ein.
    Doppelklicken Sie auf Header- Suchpfade -> + - > "$ (SDKROOT) / usr / include / libxml2"

  3. Fügen Sie -lxml2 zu "Other Linker Flag" hinzu.
    Suchen Sie nach "Other Linker Flags", während Sie in Schritt 2 suchen.
    Klicken Sie auf die Zeile "Other Linker Flags". Klicken Sie auf das "+" und fügen Sie "-lxml2" zur Liste hinzu.

  4. Ändern Sie Ihren Projekttyp in ARC -> Nein, dh Automatische Referenzzählung auf Nein. Sie können ARC gemäß Schritt 2 durchsuchen

Mandar
quelle
2

Xcode 4.5 Ich habe die CW-Lösung vollständig verwendet. Die einzige Ausnahme ist , dass $ (SDKROOT) / usr / include / libxml2 nicht für mich arbeiten, und ich hatte hinzufügen "$ (SDK_DIR)" / usr / include / libxml2 meine Projekte Header - Suchpfade und User Header - Suchpfade . Danach wird das Projekt erfolgreich erstellt.

BEARBEITEN: Ich habe ein Google GData-Projekt in meinem Projekt (MyProject genannt) (mein Projekt verwendet). GData benötigt libxml. Um das Projekt MyProject erfolgreich zu erstellen, füge ich "$ (SDK_DIR)" / usr / include / libxml2 zu den Header-Suchpfaden von MyProject und nein zu den Header-Suchpfaden von GData hinzu . Wenn ich es nicht zu MyProject hinzugefügt habe, wurde das Projekt nicht erstellt .

Petr
quelle
1

Blockquote Hinzufügen von libxml2 in Xcode 4.3.x.

Das Hinzufügen von libxml2 ist ein großer, fetter, pingeliger Schmerz im Arsch. Wenn Sie es tun wollen, tun Sie es, bevor Sie beim Erstellen Ihres Projekts zu weit kommen.

Hier ist wie.

Zieleinstellungen

Klicken Sie auf Ihr Ziel (nicht auf Ihr Projekt) und wählen Sie "Phasen erstellen". Klicken Sie auf das Dreieck "Link Binary With Libraries". Klicken Sie auf das "+", um eine Bibliothek hinzuzufügen. Scrollen Sie zum Ende der Liste und wählen Sie "libxml2.dylib". Das fügt Ihrem Projekt die libxml2-Bibliothek 2 hinzu… aber warten Sie.

Projekt Einstellungen

Jetzt müssen Sie Ihrem Projekt noch dreimal mitteilen, wo es suchen soll.

Wählen Sie die Registerkarte "Build Settings". Scrollen Sie nach unten zum Abschnitt "Verknüpfen". Doppelklicken Sie unter den Spalten Ihres Projekts auf die Zeile "Andere Linker-Flags". Klicken Sie auf das "+" und fügen Sie "-lxml2" zur Liste hinzu.

Immer noch mehr.

Scrollen Sie auf derselben Registerkarte nach unten zum Abschnitt "Suchpfade". Fügen Sie unter der Spalte Ihres Projekts in der Zeile "Framework Search Paths" "/usr/lib/libxml2.dylib" hinzu.

Fügen Sie in den Zeilen "Header-Suchpfade" UND "Benutzer-Header-Suchpfade" "$ (SDKROOT) / usr / include / libxml2" hinzu. Stellen Sie in den letzten beiden Fällen sicher, dass der Pfad in Debug AND Release eingegeben wurde.

Dann. Wählen Sie im Menü "Produkt" die Option "Reinigen".

Das funktioniert und auch für Xcode5! Danke dir!

Denko
quelle
1
Dies funktioniert in Xcode 5.0.2 nicht. Ich habe oben Änderungen an meinem Projekt vorgenommen, aber kein Glück. Kannst du mir helfen, was zu tun ist?
Ganesh
1

Legen Sie libxml2.dylib nicht unter den Framework-Ordner, sondern unter root direkt unter dem root (blaues Symbol oben links).

Klicken Sie dann auf das Projekt (blaues Symbol oben links), gehen Sie zu Build Settings, geben Sie im Suchfeld "Header Search Paths" ein und fügen Sie dieses "$ (SDKROOT) / usr / include / libxml2" hinzu.

Dieser Code behebt mein Problem und hofft, dass er Ihnen dabei hilft, dieses Problem zu beheben

Ranjan
quelle
1

@Aqib Mumtaz - Ich habe es zum Laufen gebracht, indem ich den Anweisungen in Parris 'Hinweis oben mit dem Titel "Hinzufügen von libxml2 in Xcode 4.3 / 5/6" gefolgt bin. Der Schritt bei der Verwendung eines Framework-Suchpfads funktioniert nicht und der Compiler beschwert sich. Ein großes Lob an diesen Kerl!

Ich benutze Xcode 6.2b3

Unabhängig von der Version von Xcode, die Sie verwenden, ist es fehlerhaft. Gehen Sie nicht immer davon aus, dass Kompilierungsfehler real sind. Es gibt viele Fälle, in denen es keinen Header-Suchpfaden folgt und klar aufgelistete Includes nicht gefunden werden. Schlimmer noch, die daraus resultierenden Fehler weisen Sie in verschiedene Richtungen, sodass Sie viel Zeit damit verschwenden, sich mit Ablenkungen zu beschäftigen. Nachdem das gesagt worden ist...

Empfehlen Sie Babyschritte, indem Sie genau damit beginnen ...:

  1. Erstellen Sie ein Mac OS X Cocoa-Projekt mit einem einzigen Fenster namens "Bench Test".
  2. Fügen Sie XpathQuery direkt im Finder zu Ihrem Projektquellverzeichnis hinzu
  3. Klicken Sie auf das winzige Ordnersymbol unter der roten Schaltfläche zum Schließen des Projektfensters
  4. Ziehen Sie XpathQuery (Ordner, falls vorhanden) in die Projekt-Assets links in der Anzeige des Projektfensters
  5. Ziehen Sie /Applications/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libxml2.2.dylib unten in Ihre Projektressourcen. Dies fügt es auf einfache Weise zu Ihren "Build-Phasen" -> "Binär mit Bibliotheken verknüpfen" hinzu
  6. Klicken Sie oben links in der Spalte Projektressourcen auf das Projektsymbol "Bench Test"
  7. Suchen Sie unter "Build Settings" nach "Other Linker Flags".
  8. Fügen Sie "-lxml2" (sans "") zu "Other Linker Flags" in der Spalte "Bench Test" des Projektsymbols hinzu
  9. Suche nach "Header-Suche" unter "Build-Einstellungen"
  10. Fügen Sie "$ (SDKROOT) / usr / include / libxml2" (sans "") zu "Header Search Paths" in der Spalte "Bench Test" des Projektsymbols hinzu
  11. Fügen Sie "$ (SDKROOT) / usr / include / libxml2" (sans "") zu "User Header Search Paths" in der Spalte "Bench Test" des Projektsymbols hinzu

Anmerkungen:

  • Meins würde nicht funktionieren, bis ich diesen Suchpfad sowohl zu "Header-Suchpfaden" als auch zu "Benutzer-Header-Suchpfaden" hinzugefügt hätte.
  • Um zur libxml2.2.dylib im Finder zu gelangen, müssen Sie mit der rechten Maustaste auf Ihr Xcode-Symbol klicken und "Paketkontakte anzeigen" auswählen (Editorial: Was für ein Hack. Den ganzen Müll in die App stopfen).
  • Seien Sie bereit, die verknüpfte libxml2.2.dylib zu ändern. Der in Xcode enthaltene wird absichtlich verwendet, um sicherzustellen, dass Xcode etwas erhält, von dem er weiß, und das theoretisch getestet wurde. Möglicherweise möchten Sie die Dylib später im System verwenden (lesen Sie in diesem Thread nach).
  • Da ich Xcode 6.2b3 verwende, habe ich möglicherweise eine neuere libxml2.2.dylib. Ihre könnte etwas anders benannt werden. Durchsuchen Sie einfach den Ordner nach etwas, das mit "libxml" beginnt und mit ".dylib" endet, und das sollte es sein. Möglicherweise gibt es auch einen Alias ​​wie "libxml2.dylib". Verwenden Sie dies nicht sofort, da durch das Auflösen eines Alias ​​eine weitere Variable in die Xcode-Gleichung "Was könnte Fehler haben" eingefügt wird.
  • Aus Gründen der Vernunft mache ich Aliase der externen Bibliotheken, benenne sie um, um anzugeben, um welche es sich handelt, und halte sie auf der gleichen Ebene wie die Projektdatei im Finder. Wenn sie den Speicherort, den Namen usw. ändern, enthält der Alias ​​Get Info, den vollständigen Pfad der Originaldatei für spätere Detektivarbeiten, damit das Projekt erneut kompiliert und verknüpft werden kann. (Symlinks brechen zu leicht und sind für den Mac nicht selbstverständlich.)
  • Das Letzte und Wichtigste ist http://www.cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html, wo Sie XpathQuery herunterladen und mehr Güte erhalten können.

hoffe das hilft.

Wenn Sie gerade etwas für Veteranen entwickeln, sagen wir eine iPhone / iPad- oder Mac-App, und gegen etwas namens "MDWS" oder "VIA" arbeiten, bei dem es sich um SOAP-basierte Schnittstellen zum Krankenakten-System handelt ... kontaktieren Sie mich bitte

William Cerniuk
quelle
0

Ich habe in drei Schritten inXcode 8.0 + Unit Test Project gelöst

1) Ich habe die libxml-Datei zur Build-Phase hinzugefügt. Folgen Sie diesem Link

2) Ich habe Andere Linker-Flags als -ObjC(für Projekt- und Testprojektziele ) hinzugefügt.

3) Ich richte den Header-Suchpfad ein als "${SDKROOT}/usr/include/libxml2"(Doppelter Anführungszeichen auf beiden Seiten nicht vergessen) (sowohl für Projekt- als auch für Testprojektziele)

Einer von ihnen wird das Problem lösen. Wenn nicht, müssen Sie alle drei oben genannten Punkte anwenden.

Zumry Mohamed
quelle