[vtkusers] Using VTK with CMake: link errors
Nicholas Kinar
n.kinar at usask.ca
Wed Aug 11 00:53:58 EDT 2010
Hello,
I had originally posted this question to the vtkusers mailing list.
However, after receiving feedback from other VTK users it is also
apparent that there is a possibility my question belongs on the cmake
mailing list.
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 (binary version from website)
i686-apple-darwin10-gcc-4.2.1
llvm version 2.6svn, Apple Build #2207-05
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 tried the most recent release version of CMake pulled from git and
the binary (pre-packaged) version on the Kitware website. Both generate
makefiles with the same error on Mac OS X.
I've written a CMakeLists.txt file to generate the makefile. This
CMakeLists.txt file works well on GNU/Linux (Ubuntu x86_64,
2.6.32-24-generic kernel) with gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 and GNU
ld (GNU Binutils for Ubuntu) 2.20.1-system.20100303. On GNU/Linux, the
CMakeLists.txt file generates a makefile that successfully builds my
program and links it with the VTK library.
Here is the CMakeLists.txt file:
cmake_minimum_required (VERSION 2.6)
project (fdtd-cuda-1)
find_package(VTK REQUIRED)
include( ${VTK_USE_FILE} )
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 vtkHybrid)
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 the makefile generated by cmake builds without problems on
Ubuntu GNU/Linux, a similarly-generated makefile produces the following
errors on Mac OS X. It appears that CMake is finding the VTK library in
the Python.framework directory in lieu of the one installed into
/usr/local/lib. Here are the errors produced on Mac OS X:
Matilda-2:FDTD-model-CUDA-1 nicholaskinar$ make
Linking CXX executable fdtd-cuda-1
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkHybrid.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkRendering.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkGraphics.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkverdict.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkImaging.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkftgl.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkfreetype.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkIO.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkFiltering.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkCommon.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkDICOMParser.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkmetaio.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtksqlite.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkpng.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtktiff.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkzlib.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkjpeg.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkexpat.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtksys.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkexoIIc.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
ld: warning: in
/Library/Frameworks/Python.framework/Versions/6.1/lib/vtk-5.4/libvtkNetCDF.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
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 am I doing wrong here, and what should I change to ensure that
CMake locates the proper version of VTK on Mac OS X?
Nicholas
More information about the vtkusers
mailing list