From: Maria P. <red...@ya...> - 2005-10-14 20:22:48
|
Hi: I need your help. I want to include some libraries to vxl. I read and follow the instructions to include them but I think that I'm not doing something because it doesn't work. I try to explain what I'm doing with a very simple example. First, I have a program named "example.c" /***************************************/ #include "stdio.h" void printMessage(){ printf("Message printed"); } /***************************************/ I have a library named "example.h" /*****************************************/ void printMessage(); /*****************************************/ Then I copy example.c and example.h in a directory that I made in $VXLSRC/core/myPrograms. I wrote a CMakeLists.txt /***************************************/ # vxl-1.2.0/core/myPrograms/CMakeLists.txt SET( myPrograms_sources example.c example.h ) ADD_LIBRARY(myPrograms ${myPrograms_sources}) TARGET_LINK_LIBRARIES(myPrograms) /***********************************/ After that I wrote in a terminal in $VXLBIN > make And in $VXLBIN/core/myPrograms I have the object >ls example.o Finally, I have a code named "xcv_fer.cxx" in $VXLSRC/contrib/oxl/xcv with /*********************************/ #include "xcv_fer.h" #include <vgui/vgui_menu.h> #include <vcl_iostream.h> #include "myPrograms/example.h" void xcv_fer::fer(){} void xcv_fer::temp(){ printMessage(); } vgui_menu xcv_fer::create_fer_menu(){ vgui_menu fer_menu; fer_menu.add("temp", temp); return fer_menu; } /*********************************/ And modify CMakeLists.txt in $VXLSRC/contrib/oxl/xcv /*********************************/ INCLUDE( ${MODULE_PATH}/UseVGUI.cmake ) INCLUDE_DIRECTORIES($VXLSRC/core/myPrograms) IF (HAS_VGUI) SET(xcv_sources xcv_image_tableau.cxx xcv_image_tableau.h ....... xcv_fer.cxx xcv_fer.h ) IF(CMAKE_COMPILER_IS_GNUCXX) SET_SOURCE_FILES_PROPERTIES(xcv_geometry.cxx PROPERTIES COMPILE_FLAGS "-O0 -ftemplate-depth-100") SET_SOURCE_FILES_PROPERTIES(xcv_multiview.cxx PROPERTIES COMPILE_FLAGS -O0) ENDIF(CMAKE_COMPILER_IS_GNUCXX) ADD_EXECUTABLE(xcv ${xcv_sources}) TARGET_LINK_LIBRARIES(xcv osl mvl vgui vgl vil1 vnl_algo vnl vul vbl vpl vcl myPrograms) ENDIF (HAS_VGUI) /*********************************/ And I wrote again in a terminal in $VXLBIN > make but appears an error: Building object file xcv_fer.o... Building executable $VXLBIN/contrib/oxl/xcv/xcv... xcv_fer.o(.text+0x73): En la función `xcv_fer::temp()': xcv_fer.cxx: undefined reference to `printMessage()' collect2: ld devolvió el estado de salida 1 make[7]: *** [$VXLBIN/contrib/oxl/xcv/xcv] Error 1 make[6]: *** [default_target] Error 2 make[5]: *** [default_target_xcv] Error 2 make[4]: *** [default_target] Error 2 make[3]: *** [default_target_oxl] Error 2 make[2]: *** [default_target] Error 2 make[1]: *** [default_target_contrib] Error 2 make: *** [default_target] Error 2 I really aprecciate an answer. Thanks. ___________________________________________________________ Do You Yahoo!? La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx |
From: Amitha P. <pe...@cs...> - 2005-10-15 03:46:17
|
On Fri 14 Oct 2005, Maria Perez wrote: [...] > but appears an error: > > Building object file xcv_fer.o... > Building executable $VXLBIN/contrib/oxl/xcv/xcv... > xcv_fer.o(.text+0x73): En la funci?n > `xcv_fer::temp()': > xcv_fer.cxx: undefined reference to > `printMessage()' Try make VERBOSE=1 and make sure that "-lmyPrograms" appears in the link line. Amitha. |
From: Amitha P. <pe...@cs...> - 2005-10-18 03:57:09
|
[I'm cc'ing the list again, to make sure this discussion thread is archived for future searches, etc.] On Mon 17 Oct 2005, Maria Perez wrote: > Hi: > I did > make VERBOSE=1 > > and "-lmyPrograms" appears in the link line. Do you > have another idea that what's happening? In your original post, the files were ".c" files, and hence would have C bindings, not C++ bindings. Maybe this is the problem. In xcv_xfer.cxx, try to include your routines as extern "C" { #include "myPrograms/example.h" } Amitha. |
From: Brad K. <bra...@ki...> - 2005-10-19 13:35:37
|
Amitha Perera wrote: > On Mon 17 Oct 2005, Maria Perez wrote: > >>Hi: >> I did >> make VERBOSE=1 >> >>and "-lmyPrograms" appears in the link line. Do you >>have another idea that what's happening? > > In your original post, the files were ".c" files, and hence would > have C bindings, not C++ bindings. Maybe this is the problem. In > xcv_xfer.cxx, try to include your routines as > > extern "C" { > #include "myPrograms/example.h" > } The header file should look like this: #ifdef __cplusplus extern "C" { #endif ... declarations ... #ifdef __cplusplus } /* extern "C" */ #endif That way the declarations get C linkage no matter whether they are included from a C or C++ source. -Brad |