[vtkusers] undefined reference to `vtkImageData::SetNumberOfScalarComponents(int)' ...

David Doria daviddoria+vtk at gmail.com
Sat Sep 4 18:39:46 EDT 2010


On Sat, Sep 4, 2010 at 6:27 PM, Абакумов Андрей <scratchboom at gmail.com> wrote:
> I try to compile a vtk example from here
> (http://www.vtk.org/Wiki/VTK/Examples/Cxx/ImageData/IterateImageData)
> ImageData.cpp:
> #include <vtkSmartPointer.h>
> #include <vtkImageData.h>
> int main(int, char *[]) {
>
> // Create an image data
> vtkSmartPointer <vtkImageData> imageData =
> vtkSmartPointer<vtkImageData>::New();
> // Specify the size of the image data
> imageData->SetDimensions(2, 3, 1);
> imageData->SetNumberOfScalarComponents(1);
> imageData->SetScalarTypeToDouble();
> int* dims = imageData->GetDimensions();
> // int dims[3]; // can't do this
> std::cout << "Dims: " << " x: " << dims[0] << " y: " << dims[1] << " z: "
> << dims[2] << std::endl;
> std::cout << "Number of points: " << imageData->GetNumberOfPoints()
> << std::endl;
> std::cout << "Number of cells: " << imageData->GetNumberOfCells()
> << std::endl;
> //fill every entry of the image data with "2.0"
> for (int z = 0; z < dims[2]; z++) {
> for (int y = 0; y < dims[1]; y++) {
> for (int x = 0; x < dims[0]; x++) {
> double* pixel =
> static_cast<double*> (imageData->GetScalarPointer(x, y,
> z));
> pixel[0] = 2.0;
> }
> }
> }
> //retrieve the entries from the image data and print them to the screen
> for (int z = 0; z < dims[2]; z++) {
> for (int y = 0; y < dims[1]; y++) {
> for (int x = 0; x < dims[0]; x++) {
> double* pixel =
> static_cast<double*> (imageData->GetScalarPointer(x, y,
> z));
> // do something with v
> std::cout << pixel[0] << " ";
> }
> std::cout << std::endl;
> }
> std::cout << std::endl;
> }
> return 0;
> }
>
> I compile it with command line:
> g++ -Wno-deprecated -I/home/megauser/libs/vtk-installed/include/vtk-5.6/
> -L/home/megauser/libs/vtk-installed/lib/vtk-5.6/ -lvtkHybrid ImageData.cpp
> But I get this compilation errors:
> /tmp/ccVO1Ty2.o: In function `main':
> VtkImageDataWriter.cpp:(.text+0x6b): undefined reference to
> `vtkImageData::SetNumberOfScalarComponents(int)'
> /tmp/ccVO1Ty2.o: In function `vtkImageData::SetScalarTypeToDouble()':
> VtkImageDataWriter.cpp:(.text._ZN12vtkImageData21SetScalarTypeToDoubleEv[vtkImageData::SetScalarTypeToDouble()]+0x15):
> undefined reference to `vtkImageData::SetScalarType(int)'
> /tmp/ccVO1Ty2.o: In function
> `vtkSmartPointer<vtkImageData>::~vtkSmartPointer()':
> VtkImageDataWriter.cpp:(.text._ZN15vtkSmartPointerI12vtkImageDataED1Ev[vtkSmartPointer<vtkImageData>::~vtkSmartPointer()]+0xd):
> undefined reference to `vtkSmartPointerBase::~vtkSmartPointerBase()'
> /tmp/ccVO1Ty2.o: In function `vtkSmartPointer<vtkImageData>::New()':
> VtkImageDataWriter.cpp:(.text._ZN15vtkSmartPointerI12vtkImageDataE3NewEv[vtkSmartPointer<vtkImageData>::New()]+0xe):
> undefined reference to `vtkImageData::New()'
> /tmp/ccVO1Ty2.o: In function
> `vtkSmartPointer<vtkImageData>::vtkSmartPointer(vtkImageData*,
> vtkSmartPointerBase::NoReference const&)':
> VtkImageDataWriter.cpp:(.text._ZN15vtkSmartPointerI12vtkImageDataEC1EPS0_RKN19vtkSmartPointerBase11NoReferenceE[vtkSmartPointer<vtkImageData>::vtkSmartPointer(vtkImageData*,
> vtkSmartPointerBase::NoReference const&)]+0x1b): undefined reference to
> `vtkSmartPointerBase::vtkSmartPointerBase(vtkObjectBase*,
> vtkSmartPointerBase::NoReference const&)'
> collect2: ld returned 1 exit status
> How to build this example properly?
> Thanks!

Which version of VTK are you using? This looks to me like you are
using a version that does not have those functions defined in
vtkImageData. If you compiled from source, you can look in
.../src/VTK/Filtering/vtkImageData.h to see if those functions are
defined.

David



More information about the vtkusers mailing list