[Insight-users] [ITK Community] [Insight-Developers] Problem with trivial filter (no inputs and outputs)
Matt McCormick
matt.mccormick at kitware.com
Thu Jan 23 14:57:43 EST 2014
HI Alessio,
Thanks for the response. All the .cxx source files need to be built
into the executable (header's don't necessarily need to be specified
-- they get pulled in by the "#include" lines). So,
> All these files are in the same directory (main.cxx TrainingFilter.cxx
> TrainingFilter.h CmakeLists.txt)
> My CMakeLists code is here:
>
> PROJECT (Training)
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
>
> FIND_PACKAGE (ITK REQUIRED)
> INCLUDE (${ITK_USE_FILE})
>
> ADD_EXECUTABLE ( TrainingFilter main.cxx )
ADD_EXECUTABLE ( TrainingFilter TrainingFilter.cxx main.cxx )
Hope this helps,
Matt
>
> TARGET_LINK_LIBRARIES( TrainingFilter ${ITK_LIBRARIES})
>
>
>
>
> Il 23/01/2014 20:13, Matt McCormick ha scritto:
>
>> Hi Alessio,
>>
>> It looks like your making good progress.
>>
>> The next step is to inherit from ProcessObject instead of Object to
>> get the filter pipeline functionality (which may be important
>> depending on the application).
>>
>> Regarding the linking error, what does the CMakeLists.txt look like?
>> Is the file TrainingFilter.cxx (where itk::TrainingFilter::Update() is
>> defined) built into the executable?
>>
>> Thanks,
>> Matt
>>
>> On Thu, Jan 23, 2014 at 11:56 AM, Alessio Mazzarini
>> <alessiomazzarini89 at gmail.com> wrote:
>>>
>>> Hi all. I'm trying to create a very simple filter with no inputs and
>>> outputs
>>> and templates but when i make it, compilers gives me some errors and i
>>> don't
>>> understand how to fix them.
>>>
>>> this is my header file of the filter:
>>> ****************TrainingFilter.h******************
>>> #ifndef __TrainingFilter_h
>>> #define __TrainingFilter_h
>>>
>>> #include "itkObject.h"
>>> #include "itkImage.h"
>>>
>>> namespace itk
>>> {
>>> class TrainingFilter :
>>> public Object
>>> {
>>> public:
>>> /** Standard class typedefs. */
>>> typedef TrainingFilter Self;
>>> typedef Object Superclass;
>>> typedef SmartPointer < Self > Pointer;
>>> typedef SmartPointer < const Self > ConstPointer;
>>>
>>> itkNewMacro (Self);
>>> itkTypeMacro(TrainingFilter, Object);
>>>
>>> void Update(); //Method of the filter
>>>
>>> protected:
>>> TrainingFilter();
>>> ~TrainingFilter();
>>>
>>> private:
>>> TrainingFilter(const Self &); //purposely not implemented
>>> void operator=(const Self &); //purposely not implemented
>>> };
>>> }
>>> #endif
>>>
>>>
>>> This is its implementation:
>>> *******************TrainingFilter.cxx*************
>>> #include "TrainingFilter.h"
>>> #include "itkObject.h"
>>> #include <iostream>
>>>
>>> namespace itk
>>> {
>>> TrainingFilter::TrainingFilter() { };
>>>
>>> TrainingFilter::~TrainingFilter() { };
>>>
>>> void TrainingFilter::Update()
>>> {
>>> std::cout<<"**Filter called .cxx **"<<std::endl;
>>> }
>>> } // end namespace
>>>
>>>
>>>
>>> and this is my main, where i try, as usual, to create a FilterType and a
>>> smartpointer to call the Update method.
>>> ***********main.cxx*****************
>>> #include "TrainingFilter.h"
>>> #include <iostream>
>>> using namespace std;
>>>
>>> int main(int argc, char * argv [])
>>> {
>>> typedef itk::TrainingFilter FilterTypeTraining;
>>> FilterTypeTraining::Pointer filterTraining =
>>> FilterTypeTraining::New();
>>>
>>> try
>>> {
>>> filterTraining-> Update();
>>> }
>>> catch( itk::ExceptionObject & excp )
>>> {
>>> std::cerr << "Exception caught !" << std::endl;
>>> std::cerr << excp << std::endl;
>>> }
>>> return 0;
>>> }
>>>
>>>
>>>
>>> This is the compiler error:
>>>
>>> CMakeFiles/TrainingFilter.dir/main.cxx.o: In function `main':
>>> main.cxx:(.text+0x2c): undefined reference to
>>> `itk::TrainingFilter::Update()'
>>> CMakeFiles/TrainingFilter.dir/main.cxx.o: In function
>>> `itk::TrainingFilter::New()':
>>>
>>> main.cxx:(.text._ZN3itk14TrainingFilter3NewEv[itk::TrainingFilter::New()]+0x42):
>>> undefined reference to `itk::TrainingFilter::TrainingFilter()'
>>> CMakeFiles/TrainingFilter.dir/main.cxx.o: In function
>>> `itk::ObjectFactory<itk::TrainingFilter>::Create()':
>>>
>>> main.cxx:(.text._ZN3itk13ObjectFactoryINS_14TrainingFilterEE6CreateEv[itk::ObjectFactory<itk::TrainingFilter>::Create()]+0xe):
>>> undefined reference to `typeinfo for itk::TrainingFilter'
>>>
>>> main.cxx:(.text._ZN3itk13ObjectFactoryINS_14TrainingFilterEE6CreateEv[itk::ObjectFactory<itk::TrainingFilter>::Create()]+0x47):
>>> undefined reference to `typeinfo for itk::TrainingFilter'
>>> collect2: ld returned 1 exit status
>>> make[2]: *** [TrainingFilter] Error 1
>>> make[1]: *** [CMakeFiles/TrainingFilter.dir/all] Error 2
>>> make: *** [all] Error 2
>>>
>>>
>>>
>>> Thanks for your help,
>>> Alessio
>>>
>>> _____________________________________
>>> 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://www.itk.org/mailman/listinfo/insight-users
>>> _______________________________________________
>>> Community mailing list
>>> Community at itk.org
>>> http://public.kitware.com/cgi-bin/mailman/listinfo/community
>
>
More information about the Insight-users
mailing list