[Insight-users] Re: FltkImageViewer Problem

Luis Ibanez luis.ibanez at kitware.com
Thu, 19 Feb 2004 00:40:50 -0500


Hi Andy,

You are right, the undefined references that
you have are the OPENGL libraries.

You will understand this better if you look
at the /Modules subdirectory of CMake and
open FindOpenGl.cmake.


What you are missing in your CMakeLists.txt
file is  to add ${OPENGL_LIBRARIES} to your
LINK_LIBRARIES command.


Regards,



    Luis



----------------------
Andy Eow wrote:

> Hi Luis,
> 
> Adding the FLTK libraries to linking seems to have solved some of the
> problems. However, it's still not able to link entirely. Here's the latest
> string of errors:
> 
> Building dependencies. cmake.depends...
> Building executable /home/DICOMViewer/DicomImageViewer...
> /home/InsightToolkit-1.4.0/Applications/InsightApplications/Auxiliary/FltkIm
> ageViewer/libITKFltkImageViewer.a(fltkImage2DViewerWindow.o)(.text+0x781):
> In function `fltk::Image2DViewerWindow::draw()':
> : undefined reference to `glViewport'
> /home/InsightToolkit-1.4.0/Applications/InsightApplications/Auxiliary/FltkIm
> ageViewer/libITKFltkImageViewer.a(fltkImage2DViewerWindow.o)(.text+0x7d6):
> In function `fltk::Image2DViewerWindow::draw()':
> : undefined reference to `glClearColor'
> /home/InsightToolkit-1.4.0/Applications/InsightApplications/Auxiliary/FltkIm
> ageViewer/libITKFltkImageViewer.a(fltkImage2DViewerWindow.o)(.text+0x7e2):
> In function `fltk::Image2DViewerWindow::draw()':
> : undefined reference to `glMatrixMode'
> ...
> 
>>From the looks of it, some gl library is missing because all errors result
> from undefined references to gl* libraries.
> The following fltk libraries have already been included with the current
> cmake:
> 1. libfltk.a
> 2. fluid
> 3. libfltk_forms.a
> 4. libfltk_gl.a
> 5. libfltk_images.a
> 
> And I've also included the following for opengl paths:
> FIND_PACKAGE(OpenGL)
> IF(OPENGL_INCLUDE_PATH)
>    INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_PATH})
> ENDIF(OPENGL_INCLUDE_PATH)
> 
> What other libraries should be linked?
> 
> Thank you very much. I really appreciate your help!
> 
> Cheers,
> Andy
> 
> 
> ----- Original Message ----- 
> From: "Luis Ibanez" <luis.ibanez at kitware.com>
> To: "Andy Eow" <eow at ai.mit.edu>
> Cc: <Insight-users at itk.org>
> Sent: Wednesday, February 18, 2004 8:42 PM
> Subject: Re: FltkImageViewer Problem
> 
> 
> 
>>Hi Andy,
>>
>>Thanks for sending your CMakeLists.txt file.
>>
>>It seems that you are missing to add the FLTK
>>libraries in your LINK_LIBRARIES command:
>>
>>You now have:
>>
>>
>>>>>LINK_LIBRARIES (
>>>>> ITKBasicFilters
>>>>> ITKIO
>>>>> ITKFltkImageViewer
>>>>>)
>>>>>
>>
>>Please add  ${FLTK_LIBRARIES}
>>
>>
>>It should look like:
>>
>>
>>LINK_LIBRARIES (
>>   ITKBasicFilters
>>   ITKIO
>>   ITKFltkImageViewer
>>   ${FLTK_LIBRARIES}
>>)
>>
>>
>>This variable contains a string with the
>>names of the four FLTK libraries.
>>
>>
>>Regards,
>>
>>
>>   Luis
>>
>>
>>---------------
>>Andy Eow wrote:
>>
>>
>>>Hi Luis,
>>>
>>>Thanks for your quick response.
>>>
>>>The lines you've suggested were already included in the first e-mail and
>>>still I got the errors. I've attached my CMakeLists.txt and Makefile for
>>>your reference. Please advise.
>>>
>>>Cheers,
>>>Andy
>>>
>>>
>>>----- Original Message ----- 
>>>From: "Luis Ibanez" <luis.ibanez at kitware.com>
>>>To: "Andy Eow" <eow at ai.mit.edu>
>>>Cc: <Insight-users at itk.org>
>>>Sent: Tuesday, February 17, 2004 3:16 AM
>>>Subject: Re: FltkImageViewer Problem
>>>
>>>
>>>
>>>
>>>>Hi Andy,
>>>>
>>>>You are missing to include the configuration
>>>>for FLTK. Please add the following lines to
>>>>your CMakeLists.txt file:
>>>>
>>>>
>>>>   FIND_PACKAGE(FLTK)
>>>>   IF(FLTK_FOUND)
>>>>     INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIR})
>>>>   ENDIF(FLTK_FOUND)
>>>>
>>>>then rerun CMake and provide the locations
>>>>of all 6 FLTK components.
>>>>
>>>>Please look at the FAQ for details
>>>>
>>>>
>>>
>>>
> http://www.itk.org/cgi-bin/InsightFAQ/InsightFAQ?req=show&file=faq03.005.htp
> 
>>>>
>>>>Regards,
>>>>
>>>>
>>>>
>>>>   Luis
>>>>
>>>>
>>>>
>>>>----------------------
>>>>
>>>>Andy Eow wrote:
>>>>
>>>>
>>>>
>>>>>Hi Luis,
>>>>>
>>>>>I'm interested in writing a modified version of the DicomImageViewer
>>>
>>>that
>>>
>>>
>>>>>comes with ITKApplications and hence want to copy the existing files
>>>
>>>into a
>>>
>>>
>>>>>separate directory [/home/Code/DICOMViewer] for reference. However, I
>>>
>>>have
>>>
>>>
>>>>>not been able to get DicomImageViewer to compile in the new directory
>>>
>>>after
>>>
>>>
>>>>>copying. Read a previous post with the subject [Insight-users] Re:
>>>>>/usr/bin/ld: cannot find -lITKFltkImageViewer and added the few lines
> 
> to
> 
>>>my
>>>
>>>
>>>>>CMakeList.txt. Solved a few problems but gives the following error now:
>>>>>
>>>>>Building dependencies. cmake.depends...
>>>>>-- Using Buildname: Linux-i686-pc-linux-gnu-g++
>>>>>-- Loading VTK CMake commands
>>>>>-- Loading VTK CMake commands - done
>>>>>Building object file DicomImageViewer.o...
>>>>>Building executable /home/Code/DICOMViewer/DicomImageViewer...
>>>>>DicomImageViewer.o(.text+0xc8): In function `main':
>>>>>: undefined reference to `fl_file_chooser(char const*, char const*,
> 
> char
> 
>>>>>const*, int)'
>>>>>DicomImageViewer.o(.text+0x2c3): In function `main':
>>>>>: undefined reference to `Fl::run()'
>>>>>
>>>
>>>
> DicomImageViewer.o(.gnu.linkonce.t._ZN4fltk13Image2DViewerIfE8SetImageEPKN3i
> 
>>>>>tk5ImageIfLj2EEE+0x294): In function
>>>>>`fltk::Image2DViewer<float>::SetImage(itk::Image<float, (unsigned)2>
>>>>>const*)':
>>>>>: undefined reference to `Fl_Valuator::value(double)'
>>>>>
>>>
>>>
> DicomImageViewer.o(.gnu.linkonce.t._ZN4fltk13Image2DViewerIfE8SetImageEPKN3i
> 
>>>>>tk5ImageIfLj2EEE+0x2ac): In function
>>>>>`fltk::Image2DViewer<float>::SetImage(itk::Image<float, (unsigned)2>
>>>>>const*)':
>>>>>: undefined reference to `Fl_Valuator::value(double)'
>>>>>
>>>
>>>
> DicomImageViewer.o(.gnu.linkonce.t._ZN4fltk13Image2DViewerIfE11RenderImageEd
> 
>>>>>d+0x3c6): In function `fltk::Image2DViewer<float>::RenderImage(double,
>>>>>double)':
>>>>>: undefined reference to `Fl_Widget::redraw()'
>>>>>
>>>
>>>
> DicomImageViewer.o(.gnu.linkonce.t._ZN4fltk13Image2DViewerIfE11RenderImageEd
> 
>>>>>d+0x3cb): In function `fltk::Image2DViewer<float>::RenderImage(double,
>>>>>double)':
>>>>>: undefined reference to `Fl::check()'
>>>>>
>>>
>>>
> /home/InsightToolkit-1.4.0/Applications/InsightApplications/Auxiliary/FltkIm
> 
>>>>>ageViewer/libITKFltkImageViewer.a(fltkImage2DViewerGUI.o)(.text+0x23b):
>>>
>>>In
>>>
>>>
>>>>>function `fltkImage2DViewerGUI::fltkImage2DViewerGUI[not-in-charge]()':
>>>>>: undefined reference to `Fl_Group::end()'
>>>>>
>>>>>The list of errors go on pretty long so I've only attached a sample
>>>
>>>here.
>>>
>>>
>>>>>I'm pretty sure that the necessary libraries are present because I was
>>>
>>>able
>>>
>>>
>>>>>to compile and run the DicomImageViewer that came with ITK. I'm
> 
> guessing
> 
>>>>>it's a path problem but I'm not too sure how to go about solving it.
>>>
>>>Please
>>>
>>>
>>>>>advise.
>>>>>
>>>>>Thank you very much.
>>>>>
>>>>>Cheers,
>>>>>Andy
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>------------------------------------------------------------------------
>>>>
>>>>CMAKE_MINIMUM_REQUIRED(VERSION 1.6)
>>>>PROJECT(DICOMViewer)
>>>>INCLUDE_REGULAR_EXPRESSION("^.*$")
>>>>
>>>># Tell CMake's FIND_PACKAGE command where to look for our Find<pkg>
>>>># modules.
>>>>SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
> 
> ${ITK_DIR}/Applications/InsightApplications)
> 
>>>># Don't build anything unless the version of CMake is high enough.
>>>># The matching ELSE/ENDIF should be the last lines in the file.
>>>>IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)
>>>>
>>>>FIND_PACKAGE(ITK)
>>>>IF(ITK_FOUND)
>>>> INCLUDE(${ITK_USE_FILE})
>>>>ELSE(ITK_FOUND)
>>>> MESSAGE(FATAL_ERROR
>>>>         "Cannot build InsightApplications without ITK.  Please set
> 
> ITK_DIR.")
> 
>>>>ENDIF(ITK_FOUND)
>>>>
>>>># Add an option to use or not use FLTK (http://www.fltk.org)
>>>>OPTION(USE_FLTK "Use FLTK (The Fast Light Toolkit) for GUI (some
> 
> applications need this)" ON)
> 
>>>>IF(USE_FLTK)
>>>> FIND_PACKAGE(FLTK)
>>>> IF(FLTK_FOUND)
>>>>   INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIR})
>>>> ENDIF(FLTK_FOUND)
>>>>ENDIF(USE_FLTK)
>>>>
>>>># The fluid-generated fltk sources have many warnings.  This macro
>>>># will disable warnings for the generated files on some compilers.
>>>>MACRO(ITK_DISABLE_FLTK_GENERATED_WARNINGS files)
>>>> IF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 1.6)
>>>>   IF(CMAKE_COMPILER_IS_GNUCXX)
>>>>     FOREACH(f ${files})
>>>>       STRING(REGEX REPLACE "\\.fl$" ".cxx" SRC "${f}")
>>>>       STRING(REGEX REPLACE ".*/([^/]*)$" "\\1" SRC "${SRC}")
>>>>       SET_SOURCE_FILES_PROPERTIES(${SRC} PROPERTIES COMPILE_FLAGS -w)
>>>>     ENDFOREACH(f)
>>>>   ENDIF(CMAKE_COMPILER_IS_GNUCXX)
>>>> ENDIF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 1.6)
>>>>ENDMACRO(ITK_DISABLE_FLTK_GENERATED_WARNINGS)
>>>>
>>>>LINK_LIBRARIES (
>>>> ITKAlgorithms
>>>> ITKCommon
>>>> ITKBasicFilters
>>>>)
>>>>
>>>># If the version of CMake was too old, complain and build nothing.
>>>># These should be the last lines in this file.
>>>>ELSE("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)
>>>> MESSAGE(SEND_ERROR
>>>>         "This version of CMake is too old to build
> 
> InsightApplications.  "
> 
>>>>         "Please upgrade to CMake 1.6.")
>>>>ENDIF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)
>>>>
>>>>###################
>>>>
>>>>FIND_PATH(InsightApplications_SOURCE_DIR CMakeList.txt)
>>>>FIND_PATH(InsightApplications_BINARY_DIR CMakeCache.txt)
>>>>
>>>>INCLUDE_DIRECTORIES (
>>>> ${InsightApplications_SOURCE_DIR}/Auxiliary/FltkImageViewer
>>>> ${InsightApplications_BINARY_DIR}/Auxiliary/FltkImageViewer
>>>>)
>>>>
>>>>LINK_DIRECTORIES(
>>>> ${InsightApplications_BINARY_DIR}/Auxiliary/FltkImageViewer
>>>>)
>>>>
>>>>###################
>>>>
>>>>LINK_LIBRARIES (
>>>> ITKBasicFilters
>>>> ITKIO
>>>> ITKFltkImageViewer
>>>>)
>>>>
>>>>ADD_EXECUTABLE( DicomImageViewer DicomImageViewer.cxx )
>>
>>
>>
>>
>>
>>
> 
> 
>