ITK with QT:metadataobject.cxx中未定义的引用vnl_vector

问题描述 投票:0回答:1

我正在尝试编译一个使用ITK的Qt项目,但我收到了来自ITK库的链接器错误(见下文)。我在Ubuntu 16.04上运行并使用Qt 5.9.1构建。我编译了ITK版本4.12.1,但我也尝试了4.13以及同事的预构建版本4.12.2。我尝试使用CMake 3.5和CMake 3.10进行编译但是我对所有这些组合都有相同的错误。

我在ITK构建的lorder * | tsort文件夹中使用命令lib生成了我在Qt项目中包含的库列表。这应该生成包含库的正确顺序吗?

编译器抱怨没有找到vnl_vector,但我检查了链接库的列表和-litkvnl以及-litkvnl_algo在那里和-lITKCommon上面似乎是问题。

下面我提供了编译错误以及链接到库的.pri文件。任何帮助将不胜感激!

错误信息:

//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<char> >::~MetaDataObject()':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIcEEED2Ev[_ZN3itk14MetaDataObjectINS_5ArrayIcEEED5Ev]+0x2a): undefined reference to `vnl_vector<char>::~vnl_vector()'
//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<int> >::~MetaDataObject()':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIiEEED2Ev[_ZN3itk14MetaDataObjectINS_5ArrayIiEEED5Ev]+0x2a): undefined reference to `vnl_vector<int>::~vnl_vector()'
Makefile:249: recipe for target 'mesh2binary' failed
//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<float> >::~MetaDataObject()':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIfEEED2Ev[_ZN3itk14MetaDataObjectINS_5ArrayIfEEED5Ev]+0x2a): undefined reference to `vnl_vector<float>::~vnl_vector()'
//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<char> >::SetMetaDataObjectValue(itk::Array<char> const&)':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIcEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIcEEE22SetMetaDataObjectValueERKS2_]+0x26): undefined reference to `vnl_vector<char>::set_size(unsigned long)'
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIcEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIcEEE22SetMetaDataObjectValueERKS2_]+0x39): undefined reference to `vnl_vector<char>::operator=(vnl_vector<char> const&)'
//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<int> >::SetMetaDataObjectValue(itk::Array<int> const&)':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIiEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIiEEE22SetMetaDataObjectValueERKS2_]+0x26): undefined reference to `vnl_vector<int>::set_size(unsigned long)'
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIiEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIiEEE22SetMetaDataObjectValueERKS2_]+0x39): undefined reference to `vnl_vector<int>::operator=(vnl_vector<int> const&)'
//usr/local/lib/libITKCommon-4.12.a(itkMetaDataObject.cxx.o): In function `itk::MetaDataObject<itk::Array<float> >::SetMetaDataObjectValue(itk::Array<float> const&)':
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIfEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIfEEE22SetMetaDataObjectValueERKS2_]+0x26): undefined reference to `vnl_vector<float>::set_size(unsigned long)'
itkMetaDataObject.cxx:(.text._ZN3itk14MetaDataObjectINS_5ArrayIfEEE22SetMetaDataObjectValueERKS2_[_ZN3itk14MetaDataObjectINS_5ArrayIfEEE22SetMetaDataObjectValueERKS2_]+0x39): undefined reference to `vnl_vector<float>::operator=(vnl_vector<float> const&)'
collect2: error: ld returned 1 exit status
make: *** [mesh2binary] Error 1
11:24:11: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project mesh2binary (kit: Desktop Qt 5.9.1 GCC 64bit2)
When executing step "Make"

我包含在.pro文件中的.pri文件:

ITKDIR=/usr/local/ITK/InsightToolkit-4.12.1-Release/include/ITK-4.12
ITKLIB=/usr/local/ITK/InsightToolkit-4.12.1-Release/build/lib


VERSIONNUMBER=4.12

#Include ITK Headers
INCLUDEPATH += $${ITKDIR}

# ITK Libs
LIBS += -L$${ITKLIB} -lITKBiasCorrection-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKBioCell-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKDICOMParser-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKFEM-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOBMP-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOBioRad-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOCSV-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOGDCM-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOGE-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOGIPL-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOHDF5-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOJPEG-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOLSM-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOMRC-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOMesh-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOMeta-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIONIFTI-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIONRRD-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOPNG-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOSiemens-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOSpatialObjects-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOStimulate-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOTransformBase-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOTransformHDF5-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOTransformInsightLegacy-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOTransformMatlab-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOVTK-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKKLMRegionGrowing-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKLabelMap-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKMesh-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKOptimizers-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKOptimizersv4-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKPath-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKPolynomials-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKQuadEdgeMesh-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKSpatialObjects-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKStatistics-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKTransform-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKVNLInstantiation-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKVTK-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKVideoCore-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKVideoIO-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKWatersheds-$${VERSIONNUMBER}
#LIBS += -L$${ITKLIB} -lhdf5
LIBS += -L$${ITKLIB} -litkgdcmMEXD-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litknetlib-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litktestlib-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOTIFF-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKgiftiio-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKMetaIO-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKNrrdIO-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkpng-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOIPL-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOXML-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKTransformFactory-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkhdf5_cpp
LIBS += -L$${ITKLIB} -litkNetlibSlatec-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkvnl_algo-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmMSFF-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmsocketxx-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litktiff-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKniftiio-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKIOImageBase-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkhdf5
LIBS += -L$${ITKLIB} -litkvnl-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkv3p_netlib-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmDICT-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmcharls-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmuuid-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmopenjpeg-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmjpeg8-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmjpeg16-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmjpeg12-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkjpeg-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKznz-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKCommon-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkvcl-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmIOD-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litksys-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkdouble-conversion-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmDSED-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -lITKEXPAT-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkgdcmCommon-$${VERSIONNUMBER}
LIBS += -L$${ITKLIB} -litkzlib-$${VERSIONNUMBER}
c++ qt static-libraries undefined-reference itk
1个回答
0
投票

我建议你将项目的构建系统转换为CMake。我不建议使用除CMake之外的任何其他系统构建ITK。从2.8.10开始它非常稳定,如果你有一个当前的版本,应该没有问题。

您的CMakeLists.txt文件可能看起来类似于:

cmake_minimum_required(VERSION 3.1)
set (CMAKE_CXX_STANDARD 11)
project(HelloWorldItkQt)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc and uic automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
# Find the Qt libraries
find_package(Qt5Gui)
find_package(Qt5Widgets)
find_package(Qt5Core)
#find and enable ITK
find_package(ITK)
include(${ITK_USE_FILE})
# Tell CMake to create the helloworld executable
add_executable(HelloWorldItkQt WIN32 mainwindow.h simpledialog.h mainwindow.cpp simpledialog.cpp main.cpp)

# Use the Widgets module from Qt 5.
target_link_libraries(HelloWorldItkQt Qt5::Widgets Qt5::Gui Qt5::Core ${ITK_LIBRARIES})

在这里您可以找到更多信息:

Qt5 and Cmake manual

Similar SO problem

© www.soinside.com 2019 - 2024. All rights reserved.