修复VTK 6.2链接错误

Fixing VTK 6.2 linking errors

本文关键字:链接 错误 VTK 修复      更新时间:2023-10-16

使用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看不到…

<标题>背景信息:
  • 操作系统为Ubuntu 13.10
  • VTK是6.2从Kitware github
  • CMake文件遵循Kitware CMake为VTK 6+ docs提供的指南

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} )
###################

更改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中的一个bug。我会向Kitware提出这个问题,当有新的信息可用时,我会修改答案…