[Jderobot] Ice undefined reference

Luis Roberto Morales lr.morales.iglesias en gmail.com
Mar Oct 22 15:11:59 CEST 2013


Hola,

si, tiene pinta de problema de orden de librerías. Cuando el enlazador
requiere que los elementos estén en orden hay que pasárselos en orden de
dependencia inverso, es decir, primero los dependientes y luego las
dependencias.
Si tienes librerías que dependen de Ice, este deberá estar después que las
primeras.

Lo de utilizar CMAKE_CXX_FLAGS para cargar librerías aún está en algunos y
lo desaconsejo, ya que puedes conseguir el mismo efecto - pero más
configurable - poniendo las librerías directamente en el
TARGET_LINK_LIBRARIES; por ejemplo

TARGET_LINK_LIBRARIES(
eloyBasicComponent
    ${INTERFACES_CPP_DIR}/jderobot/libJderobotInterfaces.so
    ${INTERFACES_CPP_DIR}/jderobot/libjderobotice.so
    ${INTERFACES_CPP_DIR}/jderobot/libjderobotutil.so
    ${INTERFACES_CPP_DIR}/jderobot/libcolorspaces.so
    ${INTERFACES_CPP_DIR}/jderobot/libcvfast.so
    ${INTERFACES_CPP_DIR}/jderobot/libcvblob.so
    ${INTERFACES_CPP_DIR}/jderobot/libimgAnalyze.so
    ${libglademm_LIBRARIES}
    ${OpenCV_LIBS}
    Ice
    IceUtil
)

enlazaría Ice e IceUtil colocándolos al final de la lista de elementos a
enlazar.

También tienes variables que rellena cmake para Ice si llamas a Deps/Ice
(creo que hay ejemplos de esto en otros componentes).

Un saludo,
Roberto


2013/10/22 Eloy <abanibiaboebe en gmail.com>

> Hola, ya casi estoy acabando de adaptar mi componente a la versión actual
> de
> jderobot.
>
> Me he encontrado con un error que parece ser de linkado.
>
> CMakeFiles/eloyBasicComponent.dir/control.cpp.o: In function
> `__static_initialization_and_destruction_0(int, int)':
> control.cpp:(.text+0x32f9): undefined reference to
> `IceInternal::FactoryTableInit::FactoryTableInit()'
> control.cpp:(.text+0x32fe): undefined reference to
> `IceInternal::FactoryTableInit::~FactoryTableInit()'
> control.cpp:(.text+0x3327): undefined reference to
> `Ice::AdapterNotFoundException::~AdapterNotFoundException()'
> CMakeFiles/eloyBasicComponent.dir/control.cpp.o: In function
> `IceUtil::Shared::~Shared()':
> control.cpp:(.text._ZN7IceUtil6SharedD2Ev[_ZN7IceUtil6SharedD5Ev]+0xb):
> undefined reference to `vtable for IceUtil::Shared'
> CMakeFiles/eloyBasicComponent.dir/control.cpp.o: In function
> `Ice::LocalObject::~LocalObject()':
>
> control.cpp:(.text._ZN3Ice11LocalObjectD1Ev[Ice::LocalObject::~LocalObject()]+0x17):
> undefined reference to `vtable for Ice::LocalObject'
>
> control.cpp:(.text._ZN3Ice11LocalObjectD1Ev[Ice::LocalObject::~LocalObject()]+0x29):
> undefined reference to `vtable for Ice::LocalObject'
> CMakeFiles/eloyBasicComponent.dir/control.cpp.o: In function
> `Ice::ConnectionInfo::ConnectionInfo()':
>
> control.cpp:(.text._ZN3Ice14ConnectionInfoC1Ev[Ice::ConnectionInfo::ConnectionInfo()]+0x11):
> undefined reference to `IceUtil::Shared::Shared()'
>
> Y sigue asi unas 100 lineas más...
>
>
>
> En el CMakeLists.txt tengo:
> cmake_minimum_required(VERSION 2.8)
> include(FindPkgConfig)
>
> SET( SOURCE_FILES  control.cpp eloyBasicComponent.cpp api.cpp gui.cpp)
>
> SET(INTERFACES_CPP_DIR /usr/local/lib )
> SET( CMAKE_CXX_FLAGS "-lIce -lIceUtil" ) # Opciones para el compilador
>
> include_directories(
>     ${INTERFACES_CPP_DIR}
>     /usr/local/include/jderobot/
> )
>
>
> PKG_CHECK_MODULES(gtkmm REQUIRED gtkmm-2.4)
> include_directories(${gtkmm_INCLUDE_DIRS})
> link_directories(${gtkmm_LIBRARY_DIRS})
>
> PKG_CHECK_MODULES(gthread REQUIRED gthread-2.0)
> include_directories(${gthread_INCLUDE_DIRS})
> link_directories(${gthread_LIBRARY_DIRS})
>
> PKG_CHECK_MODULES(libglademm REQUIRED libglademm-2.4)
> include_directories(${libglademm_INCLUDE_DIRS})
> link_directories(${libglademm_LIBRARY_DIRS})
>
> find_package(OpenCV REQUIRED)
>
> add_executable (eloyBasicComponent  ${SOURCE_FILES})
>
> TARGET_LINK_LIBRARIES(eloyBasicComponent
>     ${INTERFACES_CPP_DIR}/jderobot/libJderobotInterfaces.so
>     ${INTERFACES_CPP_DIR}/jderobot/libjderobotice.so
>     ${INTERFACES_CPP_DIR}/jderobot/libjderobotutil.so
>     ${INTERFACES_CPP_DIR}/jderobot/libcolorspaces.so
>     ${INTERFACES_CPP_DIR}/jderobot/libcvfast.so
>     ${INTERFACES_CPP_DIR}/jderobot/libcvblob.so
>     ${INTERFACES_CPP_DIR}/jderobot/libimgAnalyze.so
>     ${libglademm_LIBRARIES}
>     ${OpenCV_LIBS}
> )
>
>
> Y en el control.cpp
>
> #include <Ice/Ice.h>
> #include <IceUtil/IceUtil.h>
>
>
> Un saludo.
>
>
>
> --
> View this message in context:
> http://jderobot-developer-list.2315034.n4.nabble.com/Ice-undefined-reference-tp4641740.html
> Sent from the Jderobot Developer List mailing list archive at Nabble.com.
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20131022/8f92ee20/attachment-0001.htm 


More information about the Jde-developers mailing list