일부는 잘 작동하고 일부는 잘 안됩니다.정의되지 않은 참조 - 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
미리 감사드립니다.
:
해당 파일이있는 디렉토리의 전체 경로를 찾아, 다음 링커 명령 줄에 다음을 추가 . 누락/발견되지 않음은 컴파일러 오류를 발생시킵니다. 질문에 표시된 오류는 링크 오류입니다. 두 번째로, C++ 소스에 더 많은 include를 추가하면 컴파일러가 링크되어야하는 추가 사항을 컴파일 할 수 있으므로 링크 오류가 더 많이 발생할 수 있습니다. 'libvtksys-8.0.so.1'에 대한 ld 경고와 관련하여 :'libvtkCommonCore-8.0.so'는'libvtksys-8.0.so.1'에 의해 제공되는 기호를 필요로합니다. 그러므로 나는이 경고를 고려할 것이다. – ScheffBtw. 얼마 전 나는 * ix에서 일했지만 라이브러리의 순서 ('-l ...')가 때로 중요하다는 것을 기억합니다. 나는 이것이 귀하의 사건과 관련이 있는지 여부를 정말로 확신하지 못합니다. 어쩌면 이것은 우리가 그 당시 사용했던 고대 OSF-Motif/X11의 특기 였을 것입니다. – Scheff
컴파일 대 링크 오류를 인식하는 단순한 규칙 : 컴파일러 오류는 대개 소스 코드의 파일/행으로 시작합니다 (컴파일 할 C++ 파일을 찾을 수 없다는 점을 제외하고). 링커 오류는 오히려 객체 또는 lib 파일 이름 앞에 붙습니다. – Scheff