[CMake] Multiple symbol definition at linker stage with ITK4

Sergio Vera sergio.vera at alma3d.com
Tue Jun 5 11:11:41 EDT 2012


Hello all,

We are experiencing problems when linking our tests for a simple library
after switching to ITK4.
Our library is a dll. With itk3.20 we used to link it against ITKIO but
following some advices from and is linked with ${ITK_LIBRARIES}.

we have something like this in our testing's CMakeLists.txt:

(...)
# Link the executables to the required libraries.
IF (${ITK_VERSION_MAJOR} GREATER 3)
    SET(MY_ITK_LIBRARIES ${ITK_LIBRARIES})
ELSE ()
    SET(MY_ITK_LIBRARIES ITKIO)
ENDIF ()
(...)

Now, with ITK4 both the library and the test exes link with ${ITK_LIBRARIES}
so the linker complains about redefined symbols:

1>------ Build started: Project: TestAlgorithms, Configuration: Release
Win32 ------
1>  Building Custom Rule C:/cygwin/users/fpcx/soft/Alma-in-server/AuxTools/
AuxITK/AuxITKLib/Testing/CMakeLists.txt
1>  CMake does not need to re-run because C:\users\bin\Alma-in-server\
AuxTools\AuxITK\AuxITKLib\dll\win32-vs10-release-build\
Testing\CMakeFiles\generate.stamp is up-to-date.
1>ITKCommon-4.1.lib(itkDataObject.obj) : error LNK2005: "public: class
itk::ProcessObject * __thiscall itk::SmartPointerForwardReference<class
itk::ProcessObject>::operator->(void)const " (??C?$
SmartPointerForwardReference at VProcessObject@itk@@@itk@@QBEPAVProcessObject at 1@XZ)
already defined in AuxITKLib.lib(AuxITKLib.dll)
1>ITKCommon-4.1.lib(itkDataObject.obj) : error LNK2005: "public: __thiscall
itk::SmartPointerForwardReference<class itk::ProcessObject>::operator class
itk::ProcessObject *(void)const " (??B?$SmartPointerForwardReference@
VProcessObject at itk@@@itk@@QBEPAVProcessObject at 1@XZ) already defined in
AuxITKLib.lib(AuxITKLib.dll)
1>ITKCommon-4.1.lib(itkDataObject.obj) : error LNK2005: "public: __thiscall
itk::SmartPointerForwardReference<class itk::ProcessObject>::~
SmartPointerForwardReference<class itk::ProcessObject>(void)" (??1?$
SmartPointerForwardReference at VProcessObject@itk@@@itk@@QAE at XZ) already
defined in AuxITKLib.lib(AuxITKLib.dll)
1>     Creating library C:/users/bin/Alma-in-server/
AuxTools/AuxITK/AuxITKLib/dll/win32-vs10-release-build/Testing/Release/TestAlgorithms.lib
and object C:/users/bin/Alma-in-server/AuxTools/AuxITK/AuxITKLib/dll/
win32-vs10-release-build/Testing/Release/TestAlgorithms.exp
1>C:\users\bin\Alma-in-server\AuxTools\AuxITK\AuxITKLib\dll\
win32-vs10-release-build\Testing\Release\TestAlgorithms.exe : fatal error
LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

If we don't link the test exes with ${ITK_LIBRARIES} , then the compiler
claims that there are undefined symbols.

We can overcome the problem by using compiler-specific flags  such as
/FORCE:MULTIPLE (Visual Studio) and --allow-multiple-definition (gcc) but
this seems to be treating the symptoms and not the disease... Any hint on
how to link properly the exes?


Thanks
--
Sergio Vera

 Alma IT Systems
 C/ Vilana, 4B, 4º 1ª
 08022 Barcelona
 T. (+34) 932 380 592
 www.alma3d.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120605/7b739625/attachment-0001.htm>


More information about the CMake mailing list