Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/01/2010, à 10:27

bricecol

compilation/linkage tinyxml

Bonjour.

J'ai un problème pour installer tinyxml sur un ubuntu 9.10 64 bits.

Je télécharge tinyxml sur http://sourceforge.net/projects/tinyxml/files/tinyxml/2.5.3/tinyxml_2_5_3.zip/download

J'extrais l'archive et je fais :

colucci@colucci-desktop:~/Téléchargements/tinyxml$ make clean
rm -f core tinyxml.o tinyxmlparser.o xmltest.o tinyxmlerror.o tinystr.o xmltest
colucci@colucci-desktop:~/Téléchargements/tinyxml$
colucci@colucci-desktop:~/Téléchargements/tinyxml$
colucci@colucci-desktop:~/Téléchargements/tinyxml$ make
g++ -c -Wall -Wno-format -g -DDEBUG  -DTIXML_USE_STL  tinyxml.cpp -o tinyxml.o
g++ -c -Wall -Wno-format -g -DDEBUG  -DTIXML_USE_STL  tinyxmlparser.cpp -o tinyxmlparser.o
tinyxmlparser.cpp: In static member function ‘static const char* TiXmlBase::SkipWhiteSpace(const char*, TiXmlEncoding)’:
tinyxmlparser.cpp:357: warning: suggest parentheses around ‘&&’ within ‘||’
g++ -c -Wall -Wno-format -g -DDEBUG  -DTIXML_USE_STL  xmltest.cpp -o xmltest.o
g++ -c -Wall -Wno-format -g -DDEBUG  -DTIXML_USE_STL  tinyxmlerror.cpp -o tinyxmlerror.o
g++ -c -Wall -Wno-format -g -DDEBUG  -DTIXML_USE_STL  tinystr.cpp -o tinystr.o
g++ -o xmltest -g tinyxml.o tinyxmlparser.o xmltest.o tinyxmlerror.o tinystr.o
colucci@colucci-desktop:~/Téléchargements/tinyxml$
colucci@colucci-desktop:~/Téléchargements/tinyxml$
colucci@colucci-desktop:~/Téléchargements/tinyxml$ ls
changes.txt  tinystr.o         tinyxml_lib.vcproj  tinyXmlTest.dsp        xmltest
docs         tinyxml.cpp       tinyxml.o           tinyXmlTestSTL.dsp     xmltest.cpp
echo.dsp     tinyxml.dsw       tinyxmlparser.cpp   tinyXmlTestSTL.vcproj  xmltest.o
Makefile     tinyxmlerror.cpp  tinyxmlparser.o     tinyXmlTest.vcproj
readme.txt   tinyxmlerror.o    tinyxml.sln         utf8test.gif
tinystr.cpp  tinyxml.h         tinyxmlSTL.dsp      utf8testverify.xml
tinystr.h    tinyxml_lib.dsp   tinyxmlSTL.vcproj   utf8test.xml

Déjà, pouvez-vous me dire si, d'après-vous, la compilation s'est bien déroulée car je ne vois pas de .so ?

En fait, j'ai un projet C++ et cela fais plusieurs fois que j'essaie d'utiliser tinyxml sans succès. Je sais que je dois inclure le dossier tinyxml (contenant les .h) lors de la compilation de mon projet, çà c'est simple. Mais je n'arrive pas à "linker" tinyxml ?

J'ai déjà lu un topic semblable mais je n'ai pas trouvé de réponse.

Merci d'avance pour votre aide, n'hésitez-pas si vous voulez une trace.

Hors ligne

#2 Le 12/01/2010, à 11:19

bricecol

Re : compilation/linkage tinyxml

désolé pour le UP mais personne n'a une petite idée ? :-|

Hors ligne

#3 Le 12/01/2010, à 11:38

Karl_le_rouge

Re : compilation/linkage tinyxml

Tu veux faire un paquet ou bien intégrer tinyxml à ton projet ?
tinyxml n'a pas été conçue pour être une bibliothèque donc le Makefile fourni ne génére pas de bibliothèque partagée. Mais pour y remédier il te suffit de modifier le Makefile fourni pour la générer, pour te donner une idée (pas de gestion de soname mais faudrait le faire)

CXX=g++
CXXFLAGS=-fPIC -c
LDFLAGS=-shared 
OBJECTS=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
LIB=libtinyxml.so

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ 

$(LIB): $(OBJECTS)
	$(CXX) $(LDFLAGS) $< -o $(LIB)

clean:
	rm -f *.o

mrproper: clean
	rm -f $(LIB)

L'autre solution recommandée par tinyxml, c'est d'intégrer directement les fichiers à ton projet.

Dernière modification par Karl_le_rouge (Le 12/01/2010, à 11:39)

Hors ligne

#4 Le 12/01/2010, à 11:46

bricecol

Re : compilation/linkage tinyxml

merci beaucoup ! j'ai intégré les fichiers tiny et çà marche nickel. c'est encore la solution la plus simple je trouve.

Hors ligne

#5 Le 04/01/2011, à 20:25

feanoren

Re : compilation/linkage tinyxml

Bonjour
je souhaite moi aussi utiliser tinyxml mais je ne vois pas comment intégrer directement les fichiers à mon projet
Je dois inclure tout les .h de tyni (tinystr.h et tinyxml.h) dans mon main?

#include "tinystr.h"
#include "tinyxml.h"

puis compiler (sous g++) de cette manière?
: "g++ main.cpp tinystr.cpp tinystr.h tinyxml.cpp tinyxml.h tinyxmlerror.cpp -o test"

merci

Hors ligne

#6 Le 24/04/2014, à 16:51

manreset

Re : compilation/linkage tinyxml

Les mauvaises pratiques persistent :

bricol a écrit :

merci beaucoup ! j'ai intégré les fichiers tiny et çà marche nickel. c'est encore la solution la plus simple je trouve.

C'est bien, tu as trouvé la solution mais ce serait encore mieux si tu en faisais profiter tout le monde. Car tel quel ce post est inutile( au mieux " a décripter"), et mène à une impasse comme beaucoup d'autres d'ailleurs sur la toile...
ce n'est pas personnel mais please essayez de penser aux autres! Cela évite que nous fassions à chaque fois le même effort...


feanoren a écrit :

puis compiler (sous g++) de cette manière?
: "g++ main.cpp tinystr.cpp tinystr.h tinyxml.cpp tinyxml.h tinyxmlerror.cpp -o test"

Tu as certainement trouvé la solution depuis, mais aucun retour...
J'ai réussi à compiler tinyXML de sourceforge  avec une demo (minimaliste), de monde coté j'ai répris le makefile ( tres bien fait) présent dans le zip  et je l'ai adapté à mon exemple :
ça compile sans erreur !

demo.cpp :

/// Modele test 
#include <iostream>
#include "tinyxml.h"
/*#include <cstdlib>
#include <cstring>
#include <ctime>
#include <stdlib.h>
#include <stdio.h>*/

using namespace std;

int main( void ){
string fichier("exemple.xml");
TiXmlDocument doc( fichier.c_str() );
doc.LoadFile();
return 0;
}

Makefile :

#****************************************************************************
#
# Makefile for TinyXml test.
# Lee Thomason
# www.grinninglizard.com
#
# This is a GNU make (gmake) makefile
#****************************************************************************

# DEBUG can be set to YES to include debugging info, or NO otherwise
DEBUG          := NO

# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE        := NO

# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.
TINYXML_USE_STL := NO

#****************************************************************************

CC     := gcc
CXX    := g++
LD     := g++
AR     := ar rc
RANLIB := ranlib

DEBUG_CFLAGS     := -Wall -Wno-format -g -DDEBUG
RELEASE_CFLAGS   := -Wall -Wno-unknown-pragmas -Wno-format -O3

LIBS		 :=

DEBUG_CXXFLAGS   := ${DEBUG_CFLAGS} 
RELEASE_CXXFLAGS := ${RELEASE_CFLAGS}

DEBUG_LDFLAGS    := -g
RELEASE_LDFLAGS  :=

ifeq (YES, ${DEBUG})
   CFLAGS       := ${DEBUG_CFLAGS}
   CXXFLAGS     := ${DEBUG_CXXFLAGS}
   LDFLAGS      := ${DEBUG_LDFLAGS}
else
   CFLAGS       := ${RELEASE_CFLAGS}
   CXXFLAGS     := ${RELEASE_CXXFLAGS}
   LDFLAGS      := ${RELEASE_LDFLAGS}
endif

ifeq (YES, ${PROFILE})
   CFLAGS   := ${CFLAGS} -pg -O3
   CXXFLAGS := ${CXXFLAGS} -pg -O3
   LDFLAGS  := ${LDFLAGS} -pg
endif

#****************************************************************************
# Preprocessor directives
#****************************************************************************

ifeq (YES, ${TINYXML_USE_STL})
  DEFS := -DTIXML_USE_STL
else
  DEFS :=
endif

#****************************************************************************
# Include paths
#****************************************************************************

#INCS := -I/usr/include/g++-2 -I/usr/local/include
INCS :=


#****************************************************************************
# Makefile code common to all platforms
#****************************************************************************

CFLAGS   := ${CFLAGS}   ${DEFS}
CXXFLAGS := ${CXXFLAGS} ${DEFS}

#****************************************************************************
# Targets of the build
#****************************************************************************

OUTPUT := demo

all: ${OUTPUT}


#****************************************************************************
# Source files
#****************************************************************************

SRCS := tinyxml.cpp tinyxmlparser.cpp demo.cpp tinyxmlerror.cpp tinystr.cpp

# Add on the sources for libraries
SRCS := ${SRCS}

OBJS := $(addsuffix .o,$(basename ${SRCS}))

#****************************************************************************
# Output
#****************************************************************************

${OUTPUT}: ${OBJS}
	${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}

#****************************************************************************
# common rules
#****************************************************************************

# Rules for compiling source files to object files
%.o : %.cpp
	${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@

%.o : %.c
	${CC} -c ${CFLAGS} ${INCS} $< -o $@

dist:
	bash makedistlinux

clean:
	-rm -f core ${OBJS} ${OUTPUT}

depend:
	#makedepend ${INCS} ${SRCS}

tinyxml.o: tinyxml.h tinystr.h
tinyxmlparser.o: tinyxml.h tinystr.h
demo.o: tinyxml.h tinystr.h
tinyxmlerror.o: tinyxml.h tinystr.h

ou bien sans le Makefile ,  avec la commande ça marche aussi :

g++ tinyxml.h tinystr.h tinyxml.cpp tinyxmlparser.cpp demo.cpp tinyxmlerror.cpp tinystr.cpp

( je ne suis pas allé plus loin mais je voulais compléter ce post pour les prochains visiteurs...)

Haha les joies des forums ;-)

Hors ligne