【问题标题】:vtk autoinit linker errorvtk 自动初始化链接器错误
【发布时间】:2015-12-08 03:16:00
【问题描述】:

我有一个非常令人困惑的问题(至少对我来说 :))链接到 vtk 库的问题。在一台台式电脑上,我的代码编译没有任何错误。我在另一台电脑上进行了相同的安装,但是那里出现了链接器错误。

在两台电脑上都安装了:itk 4.8、vtk 6.3 和 cmake 3.3。两者都是 debian 系统(8.1 - jessie)。

[ 96%] 链接 CXX 可执行项目 CMakeFiles/project.dir/main.cpp.o:在函数vtkRenderingVolume_AutoInit::~vtkRenderingVolume_AutoInit()': /usr/local/include/vtk-6.3/vtkRenderingVolumeModule.h:44: undefined reference tovtkRenderingVolumeOpenGL_AutoInit_Destruct()' CMakeFiles/project.dir/main.cpp.o:在函数vtkRenderingVolumeOpenGL_ModuleInit::~vtkRenderingVolumeOpenGL_ModuleInit()': project/main.cpp:4: undefined reference tovtkRenderingVolumeOpenGL_AutoInit_Destruct()' CMakeFiles/project.dir/main.cpp.o:在函数vtkRenderingVolumeOpenGL_ModuleInit': project/main.cpp:4: undefined reference tovtkRenderingVolumeOpenGL_AutoInit_Construct()' CMakeFiles/project.dir/main.cpp.o:在函数vtkRenderingVolume_AutoInit': /usr/local/include/vtk-6.3/vtkRenderingVolumeModule.h:44: undefined reference tovtkRenderingVolumeOpenGL_AutoInit_Construct()' libcommon.a(datareader.cpp.o):在函数vtkRenderingVolume_AutoInit': /usr/local/include/vtk-6.3/vtkRenderingVolumeModule.h:44: undefined reference tovtkRenderingVolumeOpenGL_AutoInit_Construct()' collect2:错误:ld 返回 1 个退出状态 CMakeFiles/project.dir/build.make:326:目标“项目”的配方失败

我尝试通过添加来修复这些错误

#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL); 

到我使用 vtk 库的文件,但它没有帮助。

有谁知道我做错了什么?我想知道,为什么它可以在其中一台电脑上运行,而不能在另一台电脑上运行。

非常感谢!

更新:我通过切换

的位置解决了我的问题
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

在 CMakeLists 中结束。但是,有谁知道,为什么它对不同的电脑有如此巨大的差异?

【问题讨论】:

    标签: c++ cmake debian vtk


    【解决方案1】:

    如果您使用 Nightly, 你应该把这些放在你的前面,包括任何 vtk 标题。

    #include &lt;vtkAutoInit.h&gt; VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkRenderingVolumeOpenGL);

    并链接您从 vtk 源创建的所有库

    【讨论】:

      【解决方案2】:

      只要找到 VTK_USE_FILE,您的代码就应该正确编译。在您的另一台 PC 中,VTK_USE_FILE 已经从以前的配置中找到,并且位于 CMake 缓存条目中,这就是它编译良好的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 2018-11-07
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多