libxml2 mit einem programm [SOLVED]
-
hallo,
ich hoff ich bin im richtigen forum gelandet....
also:
compiler gcc 3.3.4 unter linux.
ich verwend in einer "xml_reader.c" die libxml2 usw... dh: dort hab ich einige funktionen ausprogrammiert (sind in der xml_reader.h definiert) und verwende auch libxml funktionen.
ich möchte nun wissen, wie ich das am besten in einem programm von mir verwenden kann.
mitgcc -Wall -o xml_reader `xml2-config --cflags` xml_reader.c `xml2-config --libs`
konnte ich das programm compilen -> es hatte beim testen eine main funktion.
nun möchte ich aber meine andere datei "blabla.c" compilen. diese hat included die xml_reader.h und sollte so auf die dort definierten funktionen zugreifen können.ich denke es sollte so sein:
xml_reader.c mit libxml gelinkt als eine .o datei compiledgcc -Wall -c `xml2-config --cflags`xml_reader.c `xml2-config --libs` ergibt: gcc: -lxml2: linker input file unused because linking not done gcc: -lz: linker input file unused because linking not done gcc: -lpthread: linker input file unused because linking not done gcc: -lm: linker input file unused because linking not done
kann mir bitte jemand sagen, wie ich das richtig compilen kann... -> ich denke das schreib ich dann einfach in mein Makefile
danke im voraus!
-
Folgender Befehl `xml2-config --libs` sagt dem Compiler ja, welche Librarys er linken soll. Da du mit der -c-Option aber linken unterbindest (du willst ja Objektdateien haben), verwirft der Compiler die Optionen, was er mit den entspr. Warnungen quitiert.
Das `xml2-config --libs` musst du erst angeben, wenn du dann wirklich linkst (also die *.o-Dateien zusammenfügst).
-
hi!
also ich muss auch von der "blabla.c" eine .o erzeugen und dann "zusammenlinken"
wie kann ich aber xml_reader.o und meine blabla.c gemeinsam compilen? hättest da bitte ein beispiel?
danke!
-
Im Endeffekt machst du doch so etwas:
> gcc -c xml_reader.c `xml2-config --cflags` > gcc -c foo.c > gcc foo.o xml_reader.o
Der letzte Schritt ist das linken, da musst du dann `xml2-config --libs` hinzufügen.
-
jo, das hätt ich auch geglaubt, aber, wenn ich meine "blabla.c" compilen will krieg ich:
xml_reader.h:5: error: syntax error before "doc"
xml_reader.h:6: error: syntax error before "doc"
xml_reader.h:7: error: syntax error before "doc"doc is ein xmlDocPtr -> also von libxml2
thx
-
mach folgendes
> gcc -c xml_reader.c `xml2-config --cflags` > gcc -c foo.c `xml2-config --cflags` > gcc foo.o xml_reader.o
Zur not benutz folgendes Makefile und ersetz CXXFLAGS:= durch CXXFLAGS:=`xml2-config --cflags` und LIBS:= mit LIBS:=`xml2-config --libs`
-
hi,
das mit deinem Makefile wär cool, aber jetzt krieg ich:
make: Nothing to be done for `all'.das Makefile:
RGET :=./eth_chooser CXXFLAGS :=-ansi -Wall `xml2-config --cflags` CXX :=gcc LIBS :=`xml2-config --libs` EXT :=c SOURCES :=$(wildcard *.$(EXT)) OBJECTS :=$(patsubst %.$(EXT),%.o,$(SOURCES)) DEPS :=$(patsubst %.$(EXT),%.dep,$(SOURCES)) all: $(TARGET) $(TARGET): $(OBJECTS) $(DEPS) $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) -include $(DEPS) %.o: %.$(EXT) $(CXX) $(CXXFLAGS) -c $< -o $@ %.dep: %.$(EXT) $(CXX) $(CXXFLAGS) -MM $< -MT $(<:.$(EXT)=.o) > $@ .PHONY: clean clean: rm -f $(TARGET) $(OBJECTS) $(DEPS)
natürlich mit tabs usw richtig....
hab natürlich auch g++ und cpp auf gcc bzw. c geändertdie verzeichnisstruktur:
config.xml blabla.h xml_reader.dep blabla.h xml_reader.h Makefile eth_chooser.dep xml_reader.c xml_reader.o
danke im voraus!
-
schau mal in die erste Zeile, das sollte TARGET heißen!
-
hi!
ja, danke!
- war target falsch
- hatte ich die libxml/xmlreader.h in der xml_reader.c eingebunden, aber nicht in der xml_reader.h! daher konnte der aufruf durch eine andere klasse ja nichts von libxml/xmlreader.h wissen
jetzt gehts!
thx