Wie benutze ich yaml-cpp in einem C ++ Programm unter Linux?

8

Ich habe kürzlich entschieden, yaml als meine Konfigurationsdatei-Technologie zu verwenden, und schreibe eine c ++ - Linux-Anwendung auf OpenSuse 11.3.

Das Problem ist, dass selbst nach der erfolgreichen Installation von cmake und dem Kompilieren von yaml-cpp, wie auf der Seite mit der yaml-cpp-Dokumentation angezeigt, die einfachen Demo-Programme auf der yaml-cpp-Seite nicht kompiliert werden können. hier .

Wenn ich beispielsweise versuche, das monster.yaml- und main.cpp-Beispiel

mein Compiler beim Ausgeben des Befehls gcc main.cpp , gibt folgende Fehler aus:

  

main.cpp: 24: 25: Fehler: 'YAML' nennt keinen Typ
  main.cpp: 24: 35: error: erwartete unqualifizierte ID vor '& amp;' Token
  main.cpp: 24: 35: Fehler: erwartet ')' vor '& amp;' Token
  main.cpp: 24: 35: Fehler: erwarteter Initialisierer vor '& amp;' Token
  main.cpp: 30: 25: Fehler: 'YAML' nennt keinen Typ
  main.cpp: 30: 35: error: erwartete unqualifizierte ID vor '& amp;' Token
  main.cpp: 30: 35: error: expected ')' vor '& amp;' token
  main.cpp: 30: 35: error: erwarteter Initialisierer vor '& amp;' Token
  main.cpp: 35: 25: Fehler: 'YAML' nennt keinen Typ
  main.cpp: 35: 35: error: erwartete unqualifizierte ID vor '& amp;' Token
  main.cpp: 35: 35: Fehler: erwartet ')' vor '& amp;' Token
  main.cpp: 35: 35: error: erwarteter Initializer vor '& amp;' token

Ich habe versucht, die include-Direktive von #include "yaml-cpp/yaml.h" auf #include <yaml.h> zu ändern, da ich die yaml-lib installiert habe, aber das hat nichts gelöst.

Was habe ich falsch gemacht?

Hier ist der problematische Code aus den Zeilen 24 bis 40 eingefügt:

%Vor%

Und hier ist ein Dump der Ausgabe von sudo make install , nachdem ich den Befehl make ausgeführt habe:

%Vor%

Könnte es möglicherweise eine spezielle Anweisung / Option geben, die ich beim Kompilieren mit libyaml an den Befehl gcc anhängen muss? etwas wie gcc main.cpp -libyaml ?

Für mehr Ausgabe vom Compiler ( gcc version 4.5.0 20100604 [gcc-4_5-branch revision 160292] (SUSE Linux) ):

%Vor%

und viel mehr Zeug als kann hier passen endend in:

%Vor%

- endlich -

Gelöst es mit Chris's Lösung (siehe unten), obwohl ich tatsächlich eine noch sauberere Art gefunden habe, benutzerdefinierte Bibliotheken vorzuladen, indem ich den Befehl ldconfig benutze, um den Bibliothekssuchpfad zu konfigurieren nachdem ich den Pfad zu meinen Bibliotheken in eine *.conf Datei in /etc/ld.so.conf.d/ eingefügt habe. Siehe den detaillierten Leitfaden hier ...

    
nemesisfixx 17.04.2011, 13:09
quelle

2 Antworten

8

gcc wird nicht angewiesen, in / usr / local nachzusehen. Sie müssen es explizit tun. Außerdem sollte das wirklich g ++ und nicht gcc sein. Stellen Sie also zunächst sicher, dass Ihr Include wie folgt aussieht:

%Vor%

Dann kompilieren Sie es wie folgt:

%Vor%     
Chris Eberle 18.04.2011, 05:35
quelle
0

Es sieht so aus, als könnte es die yaml-cpp-Header nicht finden. Zuallererst sollte die include-Direktive

sein %Vor%

da, wie Sie sehen können, die Header auf /usr/local/include/yaml-cpp/ installiert sind.

Erhalten Sie eine Fehlermeldung in der Zeile der include-Anweisung? (Können Sie die vollständige Compiler-Ausgabe veröffentlichen?)

    
Jesse Beder 17.04.2011 16:32
quelle

Tags und Links