修复VTK 6.2链接错误

时间:2014-08-14 10:14:56

标签: c++ vtk

使用VTK 6.2时,尝试创建项目时会出现多个链接错误:

/usr/bin/ld: cannot find -lvtkWrappingTools
/usr/bin/ld: cannot find -lvtkGUISupportQt
/usr/bin/ld: cannot find -lvtkWrappingPythonCore
/usr/bin/ld: cannot find -lvtkFiltersPython
/usr/bin/ld: cannot find -lvtkGUISupportQtSQL
/usr/bin/ld: cannot find -lvtkRenderingQt
/usr/bin/ld: cannot find -lvtkglew
/usr/bin/ld: cannot find -lvtkGUISupportQtOpenGL
/usr/bin/ld: cannot find -lvtkLocalExample
/usr/bin/ld: cannot find -lvtkViewsQt
/usr/bin/ld: cannot find -lvtkoggtheora
/usr/bin/ld: cannot find -lvtkGUISupportQtWebkit

问题:

未解决的链接器错误。这可能是路径问题,因为库似乎出现在/usr/local/中,但ld在编译时看不到...

背景资料:

将VTK配置为源外CMake构建(没有问题),然后进行make和make install,以便将所有库正确放置在/usr/local/lib中。

我的项目构建现在使用以下CMakeLists.txt:

# Add VTK, insist that it uses 6.2, 
find_package(VTK 6.2 EXACT REQUIRED NO_MODULE)
include(${VTK_USE_FILE})

find_package(GLEW REQUIRED)

set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${VTK_DEFINITIONS})

include_directories(
  ${VTK_INCLUDE_DIRS}
  ${GLEW_INCLUDE_DIR} 
  ${CMAKE_CURRENT_SOURCE_DIR}
)

####################
# Make my_target
####################

set(EXE my_target)

set(SOURCES 
  my_target.cpp
)
add_executable(${EXE} ${SOURCES})
target_link_libraries(${EXE} ${VTK_LIBRARIES} ${GLEW_LIBRARY} )

###################

1 个答案:

答案 0 :(得分:4)

更改find​​_package参数以仅指定所需的模块。例如:

find_package(VTK 6.2 EXACT REQUIRED COMPONENTS 
    vtkRenderingOpenGL vtkInteractionStyle NO_MODULE)

这个'修复'花了一些时间才找到。看起来默认行为是CMake包含所有 VTK模块......其中一些可能不存在。如果指定组件,则禁用默认行为。不幸的是,要知道要包含哪些库是非常困难的,因此最好使用默认值"包含所有内容"行为工作!

我的简单程序没有使用Python或Qt,但ld仍然希望解析这些基本库。即使在没有Qt或Python模块的情况下构建VTK,这似乎也是正常行为。

这可能是VTK 6.2中的错误。我会用Kitware提出它,并在有新信息时修改答案...