[vtkusers] Using VTK with CMake: link errors

Nicholas Kinar n.kinar at usask.ca
Tue Aug 10 15:40:20 EDT 2010


Hello,

I'm writing a program for a research application, and I would like to 
use Cmake as the makefile generation tool.  Here is the basic 
information pertaining to my development platform:

cmake version 2.8.2
i686-apple-darwin10-gcc-4.2.1
Snow Leopard 10.6.4 on an x86_64 Macbook Pro
vtk-5.6.0 (stable version)

The VTK libraries have been installed into the /usr/local directory.

I've written a CMakeLists.txt file to generate the makefile.  Here is 
the file:

cmake_minimum_required (VERSION 2.6)
project (fdtd-cuda-1)
find_package(VTK REQUIRED)
include_directories( ${VTK_INCLUDE_DIRS} )
include_directories(/Volumes/FILES/CODE-LIBRARY/utilities)
include_directories(/Volumes/FILES/Programs/common/TNT)
include_directories(/Volumes/FILES/Programs/common/boost/boost_1_43_0)
include (${VTK_USE_FILE})
add_executable (fdtd-cuda-1 main.cpp)
target_link_libraries(fdtd-cuda-1 ${VTK_LIBS})

Within the main.cpp file, of my C++ program I am using the following VTK 
headers:

#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkRenderer.h>
#include <vtkJPEGReader.h>
#include <vtkImageActor.h>
#include <vtkCommand.h>
#include <vtkCallbackCommand.h>
#include <vtkSmartPointer.h>

Although CMake generates the UNIX makefile properly, it appears that the 
linker cannot find some symbols:

Linking CXX executable fdtd-cuda-1
Undefined symbols:
   "vtkRenderer::New()", referenced from:
       vtkSmartPointer<vtkRenderer>::New()        in main.cpp.o
   "vtkRenderWindowInteractor::SetRenderWindow(vtkRenderWindow*)", 
referenced from:
       test_VTK()    in main.cpp.o
   "vtkRenderer::ResetCamera()", referenced from:
       test_VTK()    in main.cpp.o
   "vtkJPEGReader::New()", referenced from:
       vtkSmartPointer<vtkJPEGReader>::New()        in main.cpp.o
   "vtkSmartPointerBase::vtkSmartPointerBase(vtkObjectBase*, 
vtkSmartPointerBase::NoReference const&)", referenced from:
       vtkSmartPointer<vtkJPEGReader>::vtkSmartPointer(vtkJPEGReader*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
       vtkSmartPointer<vtkImageActor>::vtkSmartPointer(vtkImageActor*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
       vtkSmartPointer<vtkRenderer>::vtkSmartPointer(vtkRenderer*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
       
vtkSmartPointer<vtkRenderWindow>::vtkSmartPointer(vtkRenderWindow*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
       
vtkSmartPointer<vtkRenderWindowInteractor>::vtkSmartPointer(vtkRenderWindowInteractor*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
       
vtkSmartPointer<vtkInteractorStyleImage>::vtkSmartPointer(vtkInteractorStyleImage*, 
vtkSmartPointerBase::NoReference const&)in main.cpp.o
   "vtkInteractorStyleImage::New()", referenced from:
       vtkSmartPointer<vtkInteractorStyleImage>::New()        in main.cpp.o
   "vtkImageAlgorithm::GetOutput()", referenced from:
       test_VTK()    in main.cpp.o
   "vtkRenderWindowInteractor::New()", referenced from:
       vtkSmartPointer<vtkRenderWindowInteractor>::New()        in 
main.cpp.o
   "vtkImageActor::New()", referenced from:
       vtkSmartPointer<vtkImageActor>::New()        in main.cpp.o
   "vtkRenderWindow::New()", referenced from:
       vtkSmartPointer<vtkRenderWindow>::New()        in main.cpp.o
   "vtkSmartPointerBase::~vtkSmartPointerBase()", referenced from:
       vtkSmartPointer<vtkInteractorStyleImage>::~vtkSmartPointer()in 
main.cpp.o
       vtkSmartPointer<vtkRenderWindowInteractor>::~vtkSmartPointer()in 
main.cpp.o
       vtkSmartPointer<vtkRenderWindow>::~vtkSmartPointer()in main.cpp.o
       vtkSmartPointer<vtkRenderer>::~vtkSmartPointer()in main.cpp.o
       vtkSmartPointer<vtkImageActor>::~vtkSmartPointer()in main.cpp.o
       vtkSmartPointer<vtkJPEGReader>::~vtkSmartPointer()in main.cpp.o
   "vtkRenderer::AddActor(vtkProp*)", referenced from:
       test_VTK()    in main.cpp.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[2]: *** [fdtd-cuda-1] Error 1
make[1]: *** [CMakeFiles/fdtd-cuda-1.dir/all] Error 2
make: *** [all] Error 2

What is happening here, and what should I change in my CmakeLists.txt 
file to be able to properly compile this program?  It appears that there 
is a problem with the linker being unable to find some libraries.

Nicholas












More information about the vtkusers mailing list