[Jde-dev] makefiles para componentes jderobot

franciscomiguel.rivas en urjc.es franciscomiguel.rivas en urjc.es
Mie Oct 13 20:58:54 CEST 2010


Buenas,
estoy intentando compilar un componente que estoy haciendo, al  
intentarlo compilar desde el Makefile me salen una lista de  
dependencias que no están definidas...

Mi Makefile:

CXXFLAGS = -I$(JDEROBOTDIR)/include/jderobot  
-I/usr/local/include/gearbox/ `pkg-config --cflags opencv` `pkg-config  
--cflags gtkmm-2.4 libglademm-2.4 gthread-2.0`
LDFLAGS = `pkg-config --libs gtkmm-2.4 libglademm-2.4 gthread-2.0`  
`pkg-config --libs opencv` -lgsl -lgslcblas
LDADD = $(JDEROBOTDIR)/lib/jderobot/libJderobotIce.la \
         $(JDEROBOTDIR)/lib/jderobot/libJderobotUtil.la \
         $(JDEROBOTDIR)/lib/jderobot/libcolorspacesmm.la \
         $(JDEROBOTDIR)/lib/jderobot/libJderobotInterfaces.la \
         $(JDEROBOTDIR)/lib/jderobot/libprogeo.la

naobody: naobody.o
         libtool --mode=link g++ -g -O -o naobody naobody.o $(LDADD) $(LDFLAGS)

clean:
	rm -rf *.o

Errores:
cc `pkg-config --libs gtkmm-2.4 libglademm-2.4 gthread-2.0`  
`pkg-config --libs opencv` -lgsl -lgslcblas  naobody.o   -o naobody
naobody.o: In function `main':
naobody.cpp:(.text+0x11c): undefined reference to  
`jderobotice::Application::Application(jderobotice::Component&)'
naobody.cpp:(.text+0x137): undefined reference to  
`jderobotice::Application::jderobotMain(int, char**)'
naobody.o: In function `__static_initialization_and_destruction_0(int, int)':
naobody.cpp:(.text+0x1f9): undefined reference to  
`IceInternal::FactoryTable::FactoryTable()'
naobody.cpp:(.text+0x1fe): undefined reference to  
`IceInternal::FactoryTable::~FactoryTable()'
naobody.cpp:(.text+0x227): undefined reference to  
`Ice::AdapterNotFoundException::~AdapterNotFoundException()'
naobody.cpp:(.text+0x250): undefined reference to  
`jderobot::JderobotException::~JderobotException()'
naobody.cpp:(.text+0x279): undefined reference to  
`IceStorm::LinkExists::~LinkExists()'

¿veis algo que pueda faltar?

Si lo compilo desde autotools en la cadena de jde no tengo problemas..  
pero como mas adelante necesitaré usar librerías que no están dentro  
de la cadena (naoqi) necesito compilarlo desde un Makefile,

¿alguna idea?

Gracias de antemano,
Fran


"David Lobato" <dav.lobato en gmail.com> escribió:

> Hola,
>
> Os adjunto un ejemplo de Makefile para compilar un componente para jderobot
> sin tener que añadirlo al arbol de jderobot. De esta manera en los inicios
> de los componentes que vayamos desarrollando no tenemos que complicarnos la
> vida con configures o makefiles.am
>
> La idea es que una vez instalado jderobot en nuestro sistema podemos enlazar
> con sus librerías, al igual que lo haríamos con otros proyectos
> (opencv,gtk,..)
>
> El ejemplo sería así:
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> CXXFLAGS = -I $(JDEROBOTDIR)/include/jderobot `pkg-config --cflags opencv`
> `pkg-config --cflags gtkmm-2.4 libglademm-2.4 gthread-2.0`
> LDFLAGS = `pkg-config --libs gtkmm-2.4 libglademm-2.4 gthread-2.0`
> `pkg-config --libs opencv` -lgsl -lgslcblas
> LDADD = $(JDEROBOTDIR)/lib/jderobot/libJderobotIce.la \
>         $(JDEROBOTDIR)/lib/jderobot/libJderobotUtil.la \
>         $(JDEROBOTDIR)/lib/jderobot/libcolorspacesmm.la \
>         $(JDEROBOTDIR)/lib/jderobot/libJderobotInterfaces.la \
>         $(JDEROBOTDIR)/lib/jderobot/libprogeo.la
>
> calibrator: calibrator.o view.o controller.o
>         libtool --mode=link g++ -g -O -o calibrator calibrator.o view.o
> controller.o $(LDADD) $(LDFLAGS)
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> En este ejemplo estoy compilando el componente calibrator que se crea desde
> los tres objetos indicados. Estos se compilan con una regla implicita de
> make.
> Para inicializar la variable JDEROBOTDIR, que es el lugar donde hemos
> instalado jderobot, podemos bien declarar la variable de entorno bien
> pasarsela a make con:
>
> $> JDEROBOTDIR=path-jderobot make
>
> Y con esto generaremos el ejecutable calibrator con todas sus librerías
> dinámicas al alcance (no mas LDLIBRARYPATH!!)
>
> Espero que sea de ayuda,
>
>
> --
> David Lobato Bravo
>
> Universidad Rey Juan Carlos
> c/Tulipan s/n
> 28933 Móstoles
> Madrid, Spain
> http://jderobot.org
>




More information about the Jde-developers mailing list