[Insight-users] Help with "Undefined references during linking"

Martin Kavec kavec at messi.uku.fi
Wed Apr 5 04:07:34 EDT 2006


Thanks for help Luis.

After completing the CMakeList.txt, there are no further issues.

Would there be an interest to include the class into the future ITK release. I 
would be glad to donate it, once it's finished.

Cheers,

Martin

On Tuesday 04 April 2006 14:32, Luis Ibanez wrote:
> Hi Martin,
>
> Thanks for posting the exact error messages that you are getting.
>
> The problem seems to be that in your CMakeLists.txt file you
> forgot to add the itkFSLAffineTransformFileReader.cxx file
> to the list of object files to be compiled in order to form the
> executable itkFSLAffineTransformFileReaderTest.
>
> You only put the Test for it:  itkFSLAffineTransformFileReaderTest.cxx
>
>
> so, The line that currently has:
>
>
>
>     ADD_EXECUTABLE(
>           itkFSLAffineTransformFileReaderTest
>           itkFSLAffineTransformFileReaderTest.cxx
>           )
>
>
>
> shold be modified to have:
>
>
>
>     ADD_EXECUTABLE(
>           itkFSLAffineTransformFileReaderTest
>           itkFSLAffineTransformFileReader.cxx
>           itkFSLAffineTransformFileReaderTest.cxx
>           )
>
>
>
>     Regards,
>
>
>
>         Luis
>
>
> ---------------------
>
> Martin Kavec wrote:
> > Luis,
> >
> > I am on Linux, gcc (GCC) 3.4.5 (Gentoo 3.4.5-r1, ssp-3.4.5-1.0,
> > pie-8.7.9), ITK-2.6.0.
> >
> > kavec at signal08 $ make
> > /usr/bin/cmake -H/home/kavec/Projects/itkFSLAffineTransformFileReader
> > -B/home/kavec/Projects/itkFSLAffineTransformFileReader
> > --check-build-system CMakeFiles/Makefile.cmake 0
> > make -f CMakeFiles/Makefile2 all
> > make[1]: Entering directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > make -f CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/build.make
> > CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/depend
> > make[2]: Entering directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > make[2]: Nothing to be done for
> > `CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/depend'.
> > make[2]: Leaving directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > make -f CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/build.make
> > CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/build
> > make[2]: Entering directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > Linking CXX executable itkFSLAffineTransformFileReaderTest
> > /usr/bin/cmake -E remove -f itkFSLAffineTransformFileReaderTest
> > c++     -ftemplate-depth-50  -fPIC
> > "CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransform
> >FileReaderTest.o" -o itkFSLAffineTransformFileReaderTest -rdynamic
> > -L/opt/ITK_debug/bin -lITKStatistics -lITKCommon -lITKNumerics
> > -lITKMetaIO -lITKIO -lITKNrrdIO -litkgdcm -litkjpeg12 -litkjpeg16
> > -litkopenjpeg -litkpng -litktiff -litkjpeg8 -lITKSpatialObject
> > -lITKNumerics -lITKCommon -litkvnl_inst -litkvnl_algo -litkvnl -litkvcl
> > -litknetlib -lm -litksys -lpthread -ldl -lITKMetaIO -lITKDICOMParser
> > -lITKEXPAT -lITKniftiio -lITKznz -litkzlib -lm
> > CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransformF
> >ileReaderTest.o: In function `main':
> > itkFSLAffineTransformFileReaderTest.cxx:(.text+0x1c8): undefined
> > reference to `itk::FSLAffineTransformFileReader::Update()'
> > CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransformF
> >ileReaderTest.o: In function `itk::FSLAffineTransformFileReader::New()':
> > itkFSLAffineTransformFileReaderTest.cxx:
> > (.gnu.linkonce.t._ZN3itk28FSLAffineTransformFileReader3NewEv+0x6d):
> > undefined reference to
> > `itk::FSLAffineTransformFileReader::FSLAffineTransformFileReader()'
> > CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransformF
> >ileReaderTest.o: In function
> > `itk::ObjectFactory<itk::FSLAffineTransformFileReader>::Create()':
> > itkFSLAffineTransformFileReaderTest.cxx:
> > (.gnu.linkonce.t._ZN3itk13ObjectFactoryINS_28FSLAffineTransformFileReader
> >EE6CreateEv+0xd): undefined reference to `typeinfo for
> > itk::FSLAffineTransformFileReader'
> > itkFSLAffineTransformFileReaderTest.cxx:
> > (.gnu.linkonce.t._ZN3itk13ObjectFactoryINS_28FSLAffineTransformFileReader
> >EE6CreateEv+0x4e): undefined reference to `typeinfo for
> > itk::FSLAffineTransformFileReader' collect2: ld returned 1 exit status
> > make[2]: *** [itkFSLAffineTransformFileReaderTest] Error 1
> > make[2]: Leaving directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > make[1]: *** [CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/all]
> > Error 2 make[1]: Leaving directory
> > `/home/kavec/Projects/itkFSLAffineTransformFileReader'
> > make: *** [all] Error 2
> > kavec at signal08 $
> >
> > Thanks.
> >
> > Martin
> >
> > On Tuesday 04 April 2006 13:14, Luis Ibanez wrote:
> >>Hi Martin,
> >>
> >>Please post the *exact* error messages that you get.
> >>
> >>Are you compiling this on Linux ? or Windows ?
> >>
> >>
> >>   Please let us know,
> >>
> >>
> >>      Thanks
> >>
> >>
> >>         Luis
> >>
> >>
> >>
> >>---------------------
> >>
> >>Martin Kavec wrote:
> >>>Hi,
> >>>
> >>>I am writing a piece of IO code to read a FSL affine transform file. The
> >>>transform is (always) stored in an ASCII file as a 4x4 matrix, so it is
> >>>should not be a "rocket science" to read it.
> >>>
> >>>My code is based on Code/IO/itkTransformFileREader.cxx, except that
> >>>the ::Update() method will be different. I attached the header,
> >>>implementation, CMakeList.txt and small test code to make it easier to
> >>>compile.
> >>>
> >>>The code compiles fine, but the linker complains about missing
> >>> references to ::Update(), ::New() and ::Create() methods.
> >>>
> >>>I tried to figure out what's wrong, but no luck, so I would appreciate a
> >>>help. Thanks.
> >>>
> >>>Martin
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>PROJECT( itkFSLAffineTransformFileReader )
> >>>
> >>>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)
> >>>
> >>>SET(CMAKE_VERBOSE_MAKEFILE ON)
> >>>ADD_DEFINITIONS(-Wall)
> >>>
> >>>INCLUDE_REGULAR_EXPRESSION(".*")
> >>>
> >>>ADD_EXECUTABLE(itkFSLAffineTransformFileReaderTest
> >>>itkFSLAffineTransformFileReaderTest.cxx )
> >>>TARGET_LINK_LIBRARIES(itkFSLAffineTransformFileReaderTest ITKStatistics
> >>>ITKCommon ITKNumerics ITKMetaIO ITKIO)
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>/*======================================================================
> >>>= ==
> >>>
> >>>  Program:   Insight Segmentation & Registration Toolkit
> >>>  Module:    $RCSfile: itkFSLAffineTransformFileReader.cxx,v $
> >>>  Language:  C++
> >>>  Date:      $Date: 2006/04/02 12:00:00 $
> >>>  Version:   $Revision: 1.0 $
> >>>
> >>>     This software is distributed WITHOUT ANY WARRANTY; without even
> >>>     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
> >>>     PURPOSE.  See the above copyright notices for more information.
> >>>
> >>>========================================================================
> >>>= */ #ifndef __itkFSLAffineTransformFileReader_cxx
> >>>#define __itkFSLAffineTransformFileReader_cxx
> >>>
> >>>#include "itkFSLAffineTransformFileReader.h"
> >>>
> >>>#include <itksys/ios/sstream>
> >>>
> >>>namespace itk
> >>>{
> >>>
> >>>/** Constructor */
> >>>FSLAffineTransformFileReader::FSLAffineTransformFileReader()
> >>>{
> >>>  m_FileName = "";
> >>>
> >>>  TransformPointer m_Transform = TransformType::New();
> >>>  m_Transform->SetIdentity();
> >>>}
> >>>
> >>>/** Destructor */
> >>>FSLAffineTransformFileReader::~FSLAffineTransformFileReader()
> >>>{
> >>>}
> >>>
> >>>/** Update the Reader */
> >>>void FSLAffineTransformFileReader::Update()
> >>>{
> >>>}
> >>>
> >>>
> >>>} // namespace itk
> >>>
> >>>#endif
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>#if defined(_MSC_VER)
> >>>#pragma warning ( disable : 4786 )
> >>>#endif
> >>>
> >>>#ifdef __BORLANDC__
> >>>#define ITK_LEAN_AND_MEAN
> >>>#endif
> >>>
> >>>#include "itkFSLAffineTransformFileReader.h"
> >>>
> >>>#include "itkAffineTransform.h"
> >>>
> >>>int main(int argc, char* argv[])
> >>>{
> >>>
> >>>  if( argc < 1 )
> >>>  {
> >>>     std::cerr << "Usage: " << std::endl;
> >>>     std::cerr << argv[0] << " fsl.mat"
> >>>               << std::endl;
> >>>    return EXIT_FAILURE;
> >>>
> >>>  }
> >>>
> >>>  typedef itk::FSLAffineTransformFileReader TransformReaderType;
> >>>  TransformReaderType::Pointer transformReader =
> >>>TransformReaderType::New();
> >>>
> >>>  transformReader->SetFileName( argv[1] );
> >>>
> >>>  try{
> >>>     transformReader->Update();
> >>>  }
> >>>  catch(itk::ExceptionObject & excp ) {
> >>>     std::cerr << "Error while reading the transform from file: " <<
> >>>argv[1] << std::endl; std::cerr << excp << std::endl;
> >>>     return EXIT_FAILURE;
> >>>  }
> >>>
> >>>  typedef itk::AffineTransform< double, 3 > AffineTransformType;
> >>>  AffineTransformType::Pointer fslTransform =
> >>>transformReader->GetTransform();
> >>>
> >>>  fslTransform->Print( std::cout );
> >>>
> >>>  return EXIT_SUCCESS;
> >>>}
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>/*======================================================================
> >>>= ==
> >>>
> >>>  Program:   Insight Segmentation & Registration Toolkit
> >>>  Module:    $RCSfile: itkFSLAffineTransformFileReader.h,v $
> >>>  Language:  C++
> >>>  Date:      $Date: 2006/04/02 12:00:00 $
> >>>  Version:   $Revision: 1.0 $
> >>>
> >>>     This software is distributed WITHOUT ANY WARRANTY; without even
> >>>     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
> >>>     PURPOSE.  See the above copyright notices for more information.
> >>>
> >>>========================================================================
> >>>= */ #ifndef __itkFSLAffineTransformFileReader_h
> >>>#define __itkFSLAffineTransformFileReader_h
> >>>
> >>>#include "itkLightProcessObject.h"
> >>>#include "metaTransform.h"
> >>>#include "itkAffineTransform.h"
> >>>
> >>>namespace itk
> >>>{
> >>>
> >>>class FSLAffineTransformFileReader : public LightProcessObject
> >>>{
> >>>public:
> >>>
> >>>  /** SmartPointer typedef support */
> >>>  typedef FSLAffineTransformFileReader Self;
> >>>  typedef SmartPointer< Self > Pointer;
> >>>  typedef AffineTransform< double, 3u > TransformType;
> >>>  typedef TransformType::ParametersType ParametersType;
> >>>  typedef TransformType::Pointer TransformPointer;
> >>>
> >>>  /** Method for creation through the object factory */
> >>>  itkNewMacro( Self );
> >>>
> >>>  /** Run-time type information (and related methods). */
> >>>  typedef Object Superclass;
> >>>  itkTypeMacro( FSLAffineTransformFileReader, LightProcessObject );
> >>>
> >>>  /** Set the filename  */
> >>>  itkSetStringMacro( FileName );
> >>>
> >>>  /** Get the filename */
> >>>  itkGetStringMacro( FileName );
> >>>
> >>>  /** Get transform macro */
> >>>  TransformPointer GetTransform( ) const {
> >>>     return m_Transform;
> >>>  }
> >>>
> >>>  /** Write out the transform */
> >>>  void Update();
> >>>
> >>>protected:
> >>>
> >>>  std::string m_FileName;
> >>>
> >>>  FSLAffineTransformFileReader();
> >>>  virtual ~FSLAffineTransformFileReader();
> >>>
> >>>private:
> >>>
> >>>  TransformPointer m_Transform;
> >>>
> >>>};
> >>>
> >>>} // namespace itk
> >>>
> >>>
> >>>#endif // __itkFSLAffineTransformFileReader_h
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>_______________________________________________
> >>>Insight-users mailing list
> >>>Insight-users at itk.org
> >>>http://www.itk.org/mailman/listinfo/insight-users

-- 
*********************************
Department of Electrical Engineering and Computer Science
University of Liege
Sart-Tilman, Bldg. B28
Liege B-4000
BELGIUM

Phone: +32 4 366-2870
*********************************


More information about the Insight-users mailing list