未定义的引用 - VTK 和 make

Undefined references - VTK and make

有些包含可以正常工作,有些则不能。

我在我的 cpp 中使用这些:

#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkSphereSource.h>
#include <vtkCylinderSource.h>
#include <QVTKOpenGLWidget.h>
#include <QVTKWidget.h>
#include <vtkSmartPointer.h>
#include <vtkVersion.h>
#include <vtkParametricFunctionSource.h>
#include <vtkTubeFilter.h>
#include <vtkParametricSpline.h>
#include <vtkDoubleArray.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPointData.h>
#include <vtkActor.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCylinderSource.h>
#include <vtkProperty.h>

错误#1:

undefined reference to `vtkDebugLeaksManager::~vtkDebugLeaksManager()'
undefined reference to `vtkObjectFactoryRegistryCleanup::vtkObjectFactoryRegistryCleanup()'

以下是导致此错误的示例:

#include <vtkSphereSource.h>
#include <vtkCylinderSource.h>
#include <vtkParametricFunctionSource.h>

该代码使用了很多 makefile,所以我无法与您分享所有内容,但我想以下部分可能会有所帮助:

LIBS= -lQt5Widgets -lQt5Gui -lQt5Core -lvtkViewsQt-8.0 -lvtkViewsCore-8.0 

错误 #2

/usr/bin/ld: warning: libvtksys-8.0.so.1, needed by /.../libvtkCommonCore-8.0.so, not found (try using -rpath or -rpath-link)

我想这是导致以下其他错误的主要问题

.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::Directory::Directory()'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::SystemToolsManager::~SystemToolsManager()'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::DynamicLoader::LastError()'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::DynamicLoader::CloseLibrary(void*)'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::SystemTools::Strucmp(char const*, char const*)'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::Directory::GetNumberOfFiles() const'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::SystemToolsManager::SystemToolsManager()'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::Directory::~Directory()'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::Directory::GetFile(unsigned long) const'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::DynamicLoader::GetSymbolAddress(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
.../libvtkCommonCore-8.0.so: undefined reference to `vtksys::DynamicLoader::OpenLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status

当我想使用以下内容时会发生这种情况:

LIBS= (as above) -lvtkCommonCore-8.0

提前致谢!

那个 linker 警告信息很清楚,它建议你 link libvtksys-8.0.so.1

找出该文件所在目录的完整路径,然后将以下内容添加到您的 linker 命令行:

-L<dir> -Wl,-rpath=<dir> -lvtksys-8.0