[Insight-users] Help with "Undefined references during linking"
Martin Kavec
kavec at messi.uku.fi
Tue Apr 4 10:28:28 EDT 2006
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/itkFSLAffineTransformFileReaderTest.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/itkFSLAffineTransformFileReaderTest.o:
In function `main':
itkFSLAffineTransformFileReaderTest.cxx:(.text+0x1c8): undefined reference to
`itk::FSLAffineTransformFileReader::Update()'
CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransformFileReaderTest.o:
In function `itk::FSLAffineTransformFileReader::New()':
itkFSLAffineTransformFileReaderTest.cxx:
(.gnu.linkonce.t._ZN3itk28FSLAffineTransformFileReader3NewEv+0x6d): undefined
reference to
`itk::FSLAffineTransformFileReader::FSLAffineTransformFileReader()'
CMakeFiles/itkFSLAffineTransformFileReaderTest.dir/itkFSLAffineTransformFileReaderTest.o:
In function
`itk::ObjectFactory<itk::FSLAffineTransformFileReader>::Create()':
itkFSLAffineTransformFileReaderTest.cxx:
(.gnu.linkonce.t._ZN3itk13ObjectFactoryINS_28FSLAffineTransformFileReaderEE6CreateEv+0xd):
undefined reference to `typeinfo for itk::FSLAffineTransformFileReader'
itkFSLAffineTransformFileReaderTest.cxx:
(.gnu.linkonce.t._ZN3itk13ObjectFactoryINS_28FSLAffineTransformFileReaderEE6CreateEv+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