[Insight-users] Simple (stupid) question re I/O

Neal R. Harvey harve at lanl.gov
Thu Dec 18 12:58:17 EST 2008


I have recently become interested in ITK as it seems like it can offer a 
lot of what I
want/need for a whole bunch of projects.
Anyhoo, I downloaded the code and built it successfully, with no errors 
or problems,
according to the instructions in the user guide.
I was all excited, and was working my way through the user guide, trying 
to become
sufficiently familiar with using the tool kit.
I thought I would try to read/write a TIFF file (as most of my images 
are TIFF), and produced
the following (small and simple code), taking baby steps, in which I 
don't even get to the actual
reading or writing of the TIFF file, based on the 
Examples/IO/ImageReadExportVTK.cxx provided in the ITK code-base:
(note that if I use the actual ImageReadExportVTK.cxx code provided, I 
get the same errors)

#include "itkImage.h"
#include <iostream>
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkTIFFImageIO.h"

int main( int argc, char ** argv )
{
  if( argc < 3 )
    {
      std::cerr << "Usage: " << std::endl;
      std::cerr << argv[0] << " inputImageFile  outputImageFile " << 
std::endl;
      return EXIT_FAILURE;
    }

  typedef unsigned short      PixelType;
  const   unsigned int        Dimension = 2;
  typedef itk::Image< PixelType, Dimension >    ImageType;

  typedef itk::ImageFileReader< ImageType >  ReaderType;
  typedef itk::ImageFileWriter< ImageType >  WriterType;
  typedef itk::TIFFImageIO                   ImageIOType;

  ReaderType::Pointer reader = ReaderType::New();
  WriterType::Pointer writer = WriterType::New();
  ImageIOType::Pointer tiffIO = ImageIOType::New();

  return EXIT_SUCCESS;
}

When I compile the code I get the following:

dumbass$ make
Scanning dependencies of target HelloWorld
[100%] Building CXX object CMakeFiles/HelloWorld.dir/HelloWorld.o
Linking CXX executable HelloWorld
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageIORegion::~ImageIORegion()':
HelloWorld.cxx:(.text._ZN3itk13ImageIORegionD1Ev[itk::ImageIORegion::~ImageIORegion()]+0x7): 
undefined reference to `vtable for itk::ImageIORegion'
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageIORegion::ImageIORegion(unsigned int)':
HelloWorld.cxx:(.text._ZN3itk13ImageIORegionC1Ej[itk::ImageIORegion::ImageIORegion(unsigned 
int)]+0x13): undefined reference to `vtable for itk::ImageIORegion'
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageIORegion::ImageIORegion(itk::ImageIORegion const&)':
HelloWorld.cxx:(.text._ZN3itk13ImageIORegionC1ERKS0_[itk::ImageIORegion::ImageIORegion(itk::ImageIORegion 
const&)]+0x13): undefined reference to `vtable for itk::ImageIORegion'
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageFileReader<itk::Image<unsigned short, 2u>, 
itk::DefaultConvertPixelTraits<unsigned short> >::DoConvertBuffer(void*, 
unsigned long)':
HelloWorld.cxx:(.text._ZN3itk15ImageFileReaderINS_5ImageItLj2EEENS_25DefaultConvertPixelTraitsItEEE15DoConvertBufferEPvm[itk::ImageFileReader<itk::Image<unsigned 
short, 2u>, itk::DefaultConvertPixelTraits<unsigned short> 
 >::DoConvertBuffer(void*, unsigned long)]+0xac6): undefined reference 
to 
`itk::ImageIOBase::GetComponentTypeAsString(itk::ImageIOBase::IOComponentType) 
const'
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageFileReader<itk::Image<unsigned short, 2u>, 
itk::DefaultConvertPixelTraits<unsigned short> >::GenerateData()':
HelloWorld.cxx:(.text._ZN3itk15ImageFileReaderINS_5ImageItLj2EEENS_25DefaultConvertPixelTraitsItEEE12GenerateDataEv[itk::ImageFileReader<itk::Image<unsigned 
short, 2u>, itk::DefaultConvertPixelTraits<unsigned short> 
 >::GenerateData()]+0x44b): undefined reference to 
`itk::operator<<(std::basic_ostream<char, std::char_traits<char> >&, 
itk::ImageIORegion const&)'
HelloWorld.cxx:(.text._ZN3itk15ImageFileReaderINS_5ImageItLj2EEENS_25DefaultConvertPixelTraitsItEEE12GenerateDataEv[itk::ImageFileReader<itk::Image<unsigned 
short, 2u>, itk::DefaultConvertPixelTraits<unsigned short> 
 >::GenerateData()]+0x992): undefined reference to 
`itk::ImageIOBase::GetImageSizeInBytes() const'
CMakeFiles/HelloWorld.dir/HelloWorld.o: In function 
`itk::ImageFileReader<itk::Image<unsigned short, 2u>, 
itk::DefaultConvertPixelTraits<unsigned short> 
 >::GenerateOutputInformation()':
HelloWorld.cxx:(.text._ZN3itk15ImageFileReaderINS_5ImageItLj2EEENS_25DefaultConvertPixelTraitsItEEE25GenerateOutputInformationEv[itk::ImageFileReader<itk::Image<unsigned 
short, 2u>, itk::DefaultConvertPixelTraits<unsigned short> 
 >::GenerateOutputInformation()]+0x33b): undefined reference to 
`itk::ImageIOFactory::CreateImageIO(char const*, 
itk::ImageIOFactory::FileModeType)'
HelloWorld.cxx:(.text._ZN3itk15ImageFileReaderINS_5ImageItLj2EEENS_25DefaultConvertPixelTraitsItEEE25GenerateOutputInformationEv[itk::ImageFileReader<itk::Image<unsigned 
short, 2u>, itk::DefaultConvertPixelTraits<unsigned short> 
 >::GenerateOutputInformation()]+0x4d8): undefined reference to 
`typeinfo for itk::ImageIOBase'
collect2: ld returned 1 exit status
make[2]: *** [HelloWorld] Error 1
make[1]: *** [CMakeFiles/HelloWorld.dir/all] Error 2
make: *** [all] Error 2

It's probably something pretty minor, but it is most frustrating not 
being able to figure out the problem. I have to admit to not being much
of a C++ programmer, mainly dealing with C.
Any helpful insights would be very much appreciated.

Cheers

-- 
HARVE (Neal R. Harvey)           Email: harve at lanl.gov
ISR-2                            Phone: 505 667 9077
Los Alamos National Laboratory   Fax: 505 664 0362
Los Alamos, NM 87545, USA        Mail Stop: D-436
The generation of random numbers is too important to be left to chance.



More information about the Insight-users mailing list