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

Francisco Lopez de la Franca franciscolopezdelafranca at gmail.com
Wed Jan 14 17:05:19 EST 2015


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
>>> >
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20150114/fe27411b/attachment.html>


More information about the Insight-users mailing list