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:
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)
):
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 ...
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%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?)