[Insight-users] Re: Compiling ITK program under Linux

Luis Ibanez luis.ibanez at kitware.com
Thu Sep 15 22:23:03 EDT 2005


Hi Martin,

Please don't use AutoMake.

The whole reason why CMake came into life is that tools like AutoMake
are too hard to use and are not multiplatform.


Simply write a CMakeLists.txt file as instructed in the Tutorials,
and as it is explained in the ITK Software Guide

         http://www.itk.org/ItkSoftwareGuide.pdf

CMake is a real multi-platform configuration tool.


If you write your CMakeLists.txt file correctly you can use the exact
same file for configuring your application in


         Windows + Visual Studio 6.0
         Windows + Visual Studio 7.0
         Windows + Visual Studio 7.1
         Windows + Borland compiler
         Windows + Intel compiler 7
         Windows + Intel compiler 8
         Cygwin + Gcc 2.95
         Cygwin + Gcc 3.2
         Cygwin + Gcc 3.3
         Cygwin + Gcc 3.4
         IRIX + CC native compiler
         SUN + CC native compiler
         SUN + gcc
         Mac + gcc 3.3
         Mac + gcc 3.4
         Linux + gcc 2.95
         Linux + gcc 3.2
         Linux + gcc 3.3
         Linux + gcc 3.4
         Linux + Intel compiler
         MinGW

         ....



 Instead of wasting time with AutoMake, you could
 use CMake and in a matter of minutes start doing
 image processing instead of dealing with configuration
 issues.



   Please let us know if you have any questions
   about how to write your CMakeLists.txt file



      Regards,



          Luis



----------------------------
Martin SEISER wrote:
> Hi Luis and hi to all others,
> 
> at the moment I am trying to port my Windows ITK application to my LINUX system:
> 
> SUSE LINUX 9.3 professional
> gcc version 3.3.5 20050117
> KDevelop 3.2
> 
> I am using the ITK CVS Version and built it by using CMake 2.0.6
> 
> Have used one single class that looks like this:
> 
> ibiaImageBase.h:
> 
> #ifndef ibiaImageBase_h
> #define ibiaImageBase_h
> 
> #include <itkImage.h>
> #include <itkImageFileReader.h>
> #include <itkCastImageFilter.h>
> 
> namespace ibia {
> 	template <class PixelTypeT, unsigned int DimensionsT>
> 		/**
> 		* Class ImageBase. Defines the base class for all pixel based images.
> 		*/
>     class ImageBase : public itk::Image<PixelTypeT, DimensionsT>  {
>       public:
> 				struct ImageBaseSelf {
> 					typedef ibia::ImageBase<PixelTypeT, DimensionsT> Self;
> 				};
> 
> 				struct ImageBaseSuperclass {
> 					typedef itk::Image<PixelTypeT, DimensionsT> Superclass;
> 				};
> 
> 				struct ImageBasePointer {
> 					typedef itk::SmartPointer<ImageBaseSelf::Self> Pointer;
> 				};
> 				
> 				struct ImageBaseConstPointer {
> 					typedef itk::SmartPointer<const ImageBaseSelf::Self> ConstPointer;
> 				};
> 
> 				struct ImageBaseConstWeakPointer {
> 					typedef itk::WeakPointer<const ImageBaseSelf::Self>  ConstWeakPointer;
> 				};
> 
> 				itkTypeMacro(ImageBaseSelf::Self, ImageBaseSuperclass::Superclass);
>         unsigned int GetDimensions();
>         void Copy(ImageBaseSelf::Self* in);
> 
> 			protected:
>         ImageBase();
>         virtual ~ImageBase();
> 				static ImageBasePointer::Pointer LoadInternal(const std::string& fileName);
> 			private:
> 				ImageBase(const ImageBaseSelf::Self& in); 
>         void operator=(const ImageBaseSelf::Self& in);
>    };
> }
> 
> #endif
> 
> ibiaImageBase.cpp:
> 
> #include "ibiaImageBase.h"
> 
> using namespace ibia;
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * Getter.
> * Gets value of member component 'DimensionsT'.
> * @return unsigned int number of dimensions.
> */
> unsigned int ImageBase<PixelTypeT, DimensionsT>::GetDimensions() {
> 	return DimensionsT;
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * Copy the image of 'in' into 'this'.
> * Takes the pixel data of input and stores data within 'this' image.
> * @param in Pointer to an ImageBase class of the same pixel type and the same dimensions.
> */
> void ImageBase<PixelTypeT, DimensionsT>::Copy(ImageBase<PixelTypeT, DimensionsT>::ImageBaseSelf::Self* in) {
> 	if (0 != in) {
> 		in->Update();
> 		SetRegions(in->GetLargestPossibleRegion());
> 		CopyInformation(in);
> 		Allocate();
> 
> 		const unsigned long numberOfPixels = this->GetBufferedRegion().GetNumberOfPixels();
> 		PixelTypeT* buffer = GetBufferPointer();
> 		PixelTypeT* inBuffer = in->GetBufferPointer();
> 
> 		memcpy(buffer, inBuffer, numberOfPixels * sizeof(PixelTypeT));
> 	}
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * Default constructor.
> * Resets all member components.
> */
> ImageBase<PixelTypeT, DimensionsT>::ImageBase() : ImageBase<PixelTypeT, DimensionsT>::ImageBaseSuperclass::Superclass() {
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * De-constructor.
> */
> ImageBase<PixelTypeT, DimensionsT>::~ImageBase() {
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * Load an image with the given file name.
> * @param fileName name of the image file to load. The type is determined by the file name's extension.
> * @return itk::SmartPointer to the loaded image. NULL if loading fails.
> */
> ImageBase<PixelTypeT, DimensionsT>::ImageBasePointer::Pointer ImageBase<PixelTypeT, DimensionsT>::LoadInternal(const std::string& fileName) {
> 	typedef itk::ImageFileReader< Superclass > ReaderType;
> 	ReaderType::Pointer reader = ReaderType::New();
> 
> 	reader->SetFileName(fileName.c_str());
> 
> 	try {
> 		// actually read the file
> 		reader->Update();
> 	}
> 	catch (itk::ExceptionObject & err) { 
> 		std::cout << "Error loading file " << fileName << std::endl;
> 		std::cout << err << std::endl; 
> 		return 0;
> 	} 
> 	catch (...) {
> 		std::cout << "Error loading file " << fileName << std::endl;
> 		return 0;
> 	}
> 
> 	reader->UpdateLargestPossibleRegion();
> 
> 	// cast image from itk::Image to ibia::ImageBase
> 	typedef itk::CastImageFilter< Superclass , Self> CastType;
> 	CastType::Pointer caster = CastType::New();
> 
> 	caster->SetInput(reader->GetOutput());
> 	caster->UpdateLargestPossibleRegion();
> 	Pointer img = caster->GetOutput();
> 
> 	return img;
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * Copy-Constructor.
> * Not implemented in this version.
> * @param in object the contains data to be copied.
> */
> ImageBase<PixelTypeT, DimensionsT>::ImageBase(const ImageBase<PixelTypeT, DimensionsT>::ImageBaseSelf::Self& in) {
> }
> 
> template <class PixelTypeT, unsigned int DimensionsT>
> /**
> * operator=.
> * Not implemented in this version.
> * @param in object the contains data to be assigned.
> */
> void ImageBase<PixelTypeT, DimensionsT>::operator=(const ImageBase<PixelTypeT, DimensionsT>::ImageBaseSelf::Self& in) {
> }
> 
> I am using Automake and get the following errors:
> 
> cd '/ibia/programming/projects/c++/ibiaimagelibrary/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k 
> cd . && /bin/sh ./config.status Makefile 
> config.status: creating Makefile
> gmake all-recursive
> Making all in src
> cd .. && /bin/sh ./config.status src/Makefile depfiles
> config.status: creating src/Makefile
> config.status: executing depfiles commands
> compiling ibiaImageBase.cpp (g++)
> In file included from /usr/include/c++/3.3.5/bits/fpos.h:44,
> from /usr/include/c++/3.3.5/iosfwd:49,
> from /usr/include/c++/3.3.5/ios:44,
> from /usr/include/c++/3.3.5/ostream:45,
> from /usr/include/c++/3.3.5/iostream:45,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkLightObject.h:24,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkDataObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkImageBase.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkImage.h:20,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.h:24,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.cpp:21:
> /usr/include/c++/3.3.5/i586-suse-linux/bits/c++io.h:43: error: syntax error before `;' token
> /usr/include/c++/3.3.5/i586-suse-linux/bits/c++io.h:45: error: syntax error before `;' token
> In file included from /usr/include/c++/3.3.5/bits/stl_algobase.h:69,
> from /usr/include/c++/3.3.5/memory:54,
> from /usr/include/c++/3.3.5/string:48,
> from /usr/include/c++/3.3.5/bits/locale_classes.h:47,
> from /usr/include/c++/3.3.5/bits/ios_base.h:47,
> from /usr/include/c++/3.3.5/ios:49,
> from /usr/include/c++/3.3.5/ostream:45,
> from /usr/include/c++/3.3.5/iostream:45,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkLightObject.h:24,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkDataObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkImageBase.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Comm
> on/itkImage.h:20,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.h:24,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.cpp:21:
> /usr/include/c++/3.3.5/new:82: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:82: error: declaration of `operator new' as non-function
> /usr/include/c++/3.3.5/new:82: error: invalid declarator
> /usr/include/c++/3.3.5/new:83: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:83: error: declaration of `operator new []' as non-function
> /usr/include/c++/3.3.5/new:83: error: invalid declarator
> /usr/include/c++/3.3.5/new:86: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:86: error: syntax error before `::' token
> /usr/include/c++/3.3.5/new:86: error: `operator new' takes type `size_t' (` unsigned int') as first parameter
> /usr/include/c++/3.3.5/new:87: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:87: er
> ror: syntax error before `::' token
> /usr/include/c++/3.3.5/new:87: error: `operator new' takes type `size_t' (` unsigned int') as first parameter
> /usr/include/c++/3.3.5/new:92: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:92: error: syntax error before `*' token
> /usr/include/c++/3.3.5/new:92: error: `operator new' takes type `size_t' (` unsigned int') as first parameter
> /usr/include/c++/3.3.5/new: In function `void* operator new(unsigned int, ...)
> ':
> /usr/include/c++/3.3.5/new:92: error: `__p' undeclared (first use this function)
> /usr/include/c++/3.3.5/new:92: error: (Each undeclared identifier is reported only once for each function it appears in.)
> /usr/include/c++/3.3.5/new: At global scope:
> /usr/include/c++/3.3.5/new:93: error: `size_t' undeclared in namespace `std'
> /usr/include/c++/3.3.5/new:93: error: syntax error before `*' token
> /usr/include/c++/3.3.5/new:93: error: `operator new' takes type `size_t' (` unsigned int') as first parameter
> In file included from /usr/include/c++/3.3.5/bits/stl_algobase.h:73,
> from /usr/include/c++/3.3.5/memory:54,
> from /usr/include/c++/3.3.5/string:48,
> from /usr/include/c++/3.3.5/bits/locale_classes.h:47,
> from /usr/include/c++/3.3.5/bits/ios_base.h:47,
> from /usr/include/c++/3.3.5/ios:49,
> from /usr/include/c++/3.3.5/ostream:45,
> from /usr/include/c++/3.3.5/iostream:45,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkLightObject.h:24,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkDataObject.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkImageBase.h:23,
> from /ibia/programming/extlibraries/Insight/Code/Common/itkImage.h:20,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.h:24,
> from /ibia/programming/projects/c++/ibiaimagelibrary/src/ibiaImageBase.cpp:21:
> /usr/include/c++/3.3.5/bits/stl_iterator_base_types.h:102: error: syntax error before `,' token
> /usr/include/c++/3.3.5/bits/stl_iterator_base_types.h:109: error: template declaration of `typedef _Tp std::value_type'
> /usr/include/c++/3.3.5/bits/stl_iterator_base_types.h:109: confused by earlier errors, bailing out
> gmake[2]: *** [ibiaImageBase.o] Fehler 1
> gmake[2]: Das Target &#187;all&#171; wurde wegen Fehlern nicht aktualisiert.
> gmake[1]: *** [all-recursive] Fehler 1
> gmake: *** [all] Fehler 2
> *** Exited with status: 2 ***
> 
> Can you or anyone help me here please???
> 
> thx a lot
> 
> Martin
> 




More information about the Insight-users mailing list