2017-11-21 4 views
0

일부는 잘 작동하고 일부는 잘 안됩니다.정의되지 않은 참조 - VTK 및 확인

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

다음 사람 예를 들어이 오류를 일으키는 : # 1

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

오류 :

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

나는이 내 CPP에서 사용하고 코드는 많은 메이크 파일을 사용하므로 모든 것을 공유 할 수는 없지만 f 부품을 따르게하는 것은 도움이 될 수 있습니다

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 

미리 감사드립니다.

+0

:

해당 파일이있는 디렉토리의 전체 경로를 찾아, 다음 링커 명령 줄에 다음을 추가 . 누락/발견되지 않음은 컴파일러 오류를 발생시킵니다. 질문에 표시된 오류는 링크 오류입니다. 두 번째로, C++ 소스에 더 많은 include를 추가하면 컴파일러가 링크되어야하는 추가 사항을 컴파일 할 수 있으므로 링크 오류가 더 많이 발생할 수 있습니다. 'libvtksys-8.0.so.1'에 대한 ld 경고와 관련하여 :'libvtkCommonCore-8.0.so'는'libvtksys-8.0.so.1'에 의해 제공되는 기호를 필요로합니다. 그러므로 나는이 경고를 고려할 것이다. – Scheff

+0

Btw. 얼마 전 나는 * ix에서 일했지만 라이브러리의 순서 ('-l ...')가 때로 중요하다는 것을 기억합니다. 나는 이것이 귀하의 사건과 관련이 있는지 여부를 정말로 확신하지 못합니다. 어쩌면 이것은 우리가 그 당시 사용했던 고대 OSF-Motif/X11의 특기 였을 것입니다. – Scheff

+0

컴파일 대 링크 오류를 인식하는 단순한 규칙 : 컴파일러 오류는 대개 소스 코드의 파일/행으로 시작합니다 (컴파일 할 C++ 파일을 찾을 수 없다는 점을 제외하고). 링커 오류는 오히려 객체 또는 lib 파일 이름 앞에 붙습니다. – Scheff

답변

0

해당 링커 경고 메시지는 매우 명확하므로 libvtksys-8.0.so.1 링크를 제안합니다. 링크 오류 대 포함 깨진 차이 인식, 처음에는

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

이 두 가지 문제가 실제로 해결되었습니다. 감사! – Awastaken