[ITK-users] Undefined references to methods of template classes

Matt McCormick matt.mccormick at kitware.com
Thu Jan 15 10:41:24 EST 2015


Hi Francisco,

There is definitely something wrong with the textures features.  It is
not possible to know what is going on without more details, though.

Matt

On Thu, Jan 15, 2015 at 1:32 AM, Francisco Lopez de la Franca
<franciscolopezdelafranca at gmail.com> wrote:
> Hi Matt,
> Thanks a lot for your answers. I'll try this afternoon what you suggest
> regarding the shape filter, but what do you think about my results as for
> the texture filter?
> Regards.
> /Francisco
>
> 2015-01-15 2:30 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:
>>
>> Hi Francisco,
>>
>> Great to hear about the progress!
>>
>> The itk::BinaryImageToShapeLabelMapFilter  requires a binary input,
>> which should have an integer pixel type, like unsigned char or
>> unsigned short.  It is important to set the BackgroundValue and
>> ForegroundValue [1] to get this filter to work correctly.
>>
>> HTH,
>> Matt
>>
>> [1]
>> http://www.itk.org/Doxygen/html/classitk_1_1BinaryImageToShapeLabelMapFilter.html
>>
>> On Wed, Jan 14, 2015 at 5:05 PM, Francisco Lopez de la Franca
>> <franciscolopezdelafranca at gmail.com> wrote:
>> > Hi again.
>> > I fixed all the errors and got my library, now ready to be tested.
>> > It contains an encapsulation, on the one hand, of the class
>> > itkBinaryImageToShapeLabelMapFilter in order to get image shape
>> > descriptors
>> > of a 3D binary image, and on the other hand, the same for the class
>> > itkScalarImageToTextureFeaturesFilter to get image texture features of a
>> > 3D
>> > scalar image.
>> >
>> > I pass as input image to both classes a binary 3D Nifti image
>> > (150x150x150)
>> > containing a cylinder where the inside voxels are 255 and the outside
>> > voxels
>> > are 0.
>> >
>> > As for the shape issue, it's very strange to me that the call to
>> > GetNumberOfLabelObjects on a itk::LabelMap object returns a value of 0.
>> > The
>> > main code is as follows:
>> >
>> > binaryImageToShapeLabelMapFilter->SetInput(_input);
>> > binaryImageToShapeLabelMapFilter->ComputePerimeterOn();
>> > binaryImageToShapeLabelMapFilter->Update();
>> >
>> > LabelMapType::Pointer labelMap =
>> > binaryImageToShapeLabelMapFilter->GetOutput();
>> >
>> > int nrOfLabelObjects = labelMap->GetNumberOfLabelObjects();
>> >
>> >
>> > And, as for the texture features, the result of the filter does not seem
>> > to
>> > be very logic:
>> >
>> > Energy = 1
>> > Entropy = 0
>> > Correlation = 1
>> > Local Homogeneity = 0
>> > Inertia = 0
>> > Cluster Shade = 0
>> > Cluster Prominence = 0
>> >
>> > I've also tested this with a scalar 3D Nifti image and the results are
>> > the
>> > same.
>> >
>> > And the question is: What kind of image do I have to pass to the filters
>> > so
>> > that the code would return a more logic expected answer?
>> >
>> > Thank you very much in advance.
>> > My best regars.
>> > /Francisco
>> >
>> > 2015-01-10 22:38 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:
>> >>
>> >> Hi Francisco,
>> >>
>> >> Nice to hear about the progress!
>> >>
>> >> You will need to link your library to the ITK libraries:
>> >>
>> >>   target_link_libraries( mylibrary ${ITK_LIBRARIES} )
>> >>
>> >> HTH,
>> >> Matt
>> >>
>> >> On Sat, Jan 10, 2015 at 4:16 PM, Francisco Lopez de la Franca
>> >> <franciscolopezdelafranca at gmail.com> wrote:
>> >>>
>> >>> Thanks to your previous answer the problem was solved, but another one
>> >>> has come out. It occurs when linking to create the library. It gives
>> >>> an
>> >>> undefined reference to itk::ExceptionObject::ExceptionObject... as you
>> >>> can
>> >>> see below.
>> >>> What it is strange to me is that before including explicit template
>> >>> instantiation, I created the library without errors, and now that I
>> >>> include
>> >>> that, I get this error.
>> >>> I'll appreciate very much any help.
>> >>>
>> >>> Linking CXX shared library libTFM_Features.dll
>> >>>
>> >>>
>> >>> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj):TFM_Features.cpp:(.t
>> >>>
>> >>>
>> >>> ext$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_[_ZN3itk21MemoryAllocationErrorC
>> >>> 1ERKSsjS2_S2_]+0x35): undefined reference to
>> >>> `itk::ExceptionObject::ExceptionObj
>> >>> ect(std::string const&, unsigned int, std::string const&, std::string
>> >>> const&)'
>> >>>
>> >>>
>> >>> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj):TFM_Features.cpp:(.t
>> >>>
>> >>>
>> >>> ext$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_[_ZN3itk21MemoryAllocationErrorC
>> >>> 1ERKSsjS2_S2_]+0x40): undefined reference to `vtable for
>> >>> itk::MemoryAllocationEr
>> >>> ror'
>> >>>
>> >>>
>> >>> C:/CV/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-min
>> >>> gw32/bin/ld.exe:
>> >>> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj): ba
>> >>> d reloc address 0x40 in section
>> >>> `.text$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_
>> >>> S2_[_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_]'
>> >>> collect2.exe: error: ld returned 1 exit status
>> >>> SRC\CMakeFiles\TFM_Features.dir\build.make:219: recipe for target
>> >>> 'SRC/libTFM_Fe
>> >>> atures.dll' failed
>> >>> mingw32-make[2]: *** [SRC/libTFM_Features.dll] Error 1
>> >>> CMakeFiles\Makefile2:77: recipe for target
>> >>> 'SRC/CMakeFiles/TFM_Features.dir/all'
>> >>>  failed
>> >>> mingw32-make[1]: *** [SRC/CMakeFiles/TFM_Features.dir/all] Error 2
>> >>> Makefile:74: recipe for target 'all' failed
>> >>> mingw32-make: *** [all] Error 2
>> >>>
>> >>>
>> >>> 2015-01-09 21:02 GMT+01:00 Matt McCormick
>> >>> <matt.mccormick at kitware.com>:
>> >>>>
>> >>>> Hi Francisco,
>> >>>>
>> >>>> In order for the templates to be available in the library, they must
>> >>>> be explicitly instantiated [1].
>> >>>>
>> >>>> HTH,
>> >>>> Matt
>> >>>>
>> >>>> [1] http://www.cplusplus.com/articles/1C75fSEw/
>> >>>>
>> >>>> On Fri, Jan 9, 2015 at 2:59 PM, Francisco Lopez de la Franca
>> >>>> <franciscolopezdelafranca at gmail.com> wrote:
>> >>>> > Hi.
>> >>>> > I' like to create a library containing, for example, one template
>> >>>> > class with
>> >>>> > a number of methods.
>> >>>> > I've programmed a simple example and the compilation and generation
>> >>>> > of
>> >>>> > the
>> >>>> > library goes fine. I use the cmake "add_library" command for
>> >>>> > generating the
>> >>>> > library.
>> >>>> >
>> >>>> > The problem arises at the moment of testing the library. I get an
>> >>>> > undefined
>> >>>> > reference for every method in the template class.
>> >>>> >
>> >>>> > I've downloaded a tool to look in the contents (functions) of
>> >>>> > dynamic
>> >>>> > libraries, and there is no function in the library. If I add
>> >>>> > another
>> >>>> > class
>> >>>> > (not a template class), then, this tool shows me only the functions
>> >>>> > in
>> >>>> > this
>> >>>> > latter class.
>> >>>> >
>> >>>> > Has anyone ever come across with this problem?
>> >>>> >
>> >>>> > Thanks a lot in advance.
>> >>>> > Regards
>> >>>> > /Francisco
>> >>>> >
>> >>>> > _____________________________________
>> >>>> > Powered by www.kitware.com
>> >>>> >
>> >>>> > Visit other Kitware open-source projects at
>> >>>> > http://www.kitware.com/opensource/opensource.html
>> >>>> >
>> >>>> > Kitware offers ITK Training Courses, for more information visit:
>> >>>> > http://www.kitware.com/products/protraining.php
>> >>>> >
>> >>>> > Please keep messages on-topic and check the ITK FAQ at:
>> >>>> > http://www.itk.org/Wiki/ITK_FAQ
>> >>>> >
>> >>>> > Follow this link to subscribe/unsubscribe:
>> >>>> > http://public.kitware.com/mailman/listinfo/insight-users
>> >>>> >
>> >>>
>> >>>
>> >>
>> >
>
>


More information about the Insight-users mailing list