使用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} )
###################
答案 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提出它,并在有新信息时修改答案...