該項目的狀態QMAKE找到庫指定的文件夾中的鏈接但沒有
我想在QVTKWidget
在qmake
的Qt 5.7的項目整合,從而提供我的應用程序與3D一些不錯的支持曲面圖(2D圖表特徵目前由Qwt
處理,但如果我覺得它足夠容易集成,我可能會切換到VTK的2D圖表模塊)。
什麼已經做了迄今爲止
我已經成功地構建了VTK工具包的調試和在C:\VTK
和C:\VTKDebug\
發行版本(分別可用。此外,我也已經成功地設法將一些在我的QWidget
VTK含量手動指定其中DLL庫是被包括在內。
問題
標題中提到的問題出現在我使用qmake
的函數files()
從C:\VTK\bin
或C:\VTKDebug\bin
取回所有共享庫時,取決於項目的構建類型。原因在於,根據我在應用程序中包含的內容,我可能需要手動指定3-4個或20-30個VTK庫。爲了創建一個原型,這是相當的體力勞動,我想稍後跳過該部分,然後在評估VTK是否適合我的需求之後處理它。 VTK提供的cmake
模塊提供此功能,所以如果您願意,您可以簡單地鏈接到${VTK_LIBRARIES}
。目前我不知道qmake
項目的開箱即用支持。
這裏是我的pro
文件:
QT += core gui
CONFIG += c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Demo
TEMPLATE = app
RESOURCES = resources.qrc
# Variables will store the path to the root directory of each library using the information provided by the respective system environment variables.
MHCP_API = ""
QWT_API = ""
VTK_API = ""
CONFIG(debug, debug|release) {
message(Application will be built in DEBUG mode)
MHCP_API = $$(MCHP_HMI_API_PATH) # TODO Compile the library for debug releases (requires Visual C++)
QWT_API = $$(QWT_PATH) # QWT on my system is compiled in debug_and_release mode which means that both versios of the library are located at the same location (different names though!)
VTK_API = $$(VTK_PATH_DEBUG)
LIBS += -L$$QWT_API\\lib -lqwtd \
-L$$MHCP_API\\lib -lmchp_hmid
}
else {
message(Application will be built in RELEASE mode)
MHCP_API = $$(MCHP_HMI_API_PATH)
QWT_API = $$(QWT_PATH)
VTK_API = $$(VTK_PATH)
LIBS += -L$$QWT_API\\lib -lqwt \
-L$$MHCP_API\\lib -lmchp_hmi
}
message(-----------------------------------------------------------------------------------------)
isEmpty(MHCP_API) { error(MHCP_API variable is empty. Please make sure that MCHP_HMI_API_PATH system variable is set and that you have both reading and writing access to it) }
else { message(MHCP_API root folder set to $$MHCP_API) }
isEmpty(QWT_API) { error(QWT_API variable is empty. Please make sure that QWT system variable is set and that you have reading access to it) }
else { message(QWT_API root folder set to $$QWT_API) }
isEmpty(VTK_API) { error(VTK_API variable is empty. Please make sure that VTK system variable is set and that you have reading access to it) }
else { message(VTK_API root folder set to $$VTK_API) }
message(-----------------------------------------------------------------------------------------)
DEFINES += "VTK_DEFINITIONS"
#LIBS += -L$$VTK_API\\lib -lvtkRenderingCore-7.0 -lvtkRenderingOpenGL2-7.0 -lvtkCommonExecutionModel-7.0 -lvtkCommonCore-7.0 -lvtkViewsQt-7.0 -lvtkGUISupportQt-7.0 -lvtkRenderingQt-7.0 -lvtkChartsCore-7.0 -lvtkFiltersSources-7.0 #-lvtkRenderingOpenGL2-7.0 #FilterSources is required for the SphereSource example
LIBS += -L$$VTK_API\\bin
VTK_API_SHARED_LIB_FILES = $$files($$VTK_API\\bin\\*.dll)
for(FILE, VTK_API_SHARED_LIB_FILES) {
BASENAME = $$basename(FILE)
NO_PREFIX_NAME = $$replace(BASENAME, lib,)
VTK_LIB = $$replace(NO_PREFIX_NAME, .dll,)
message(Found "$$VTK_LIB")
LIBS += -l$$VTK_LIB
}
message(-----------------------------------------------------------------------------------------)
message(Appending $$LIBS)
INCLUDEPATH += $$MHCP_API\\include \
$$QWT_API\\include \
$$VTK_API\\include\\vtk-7.0
HEADERS += device_api.h \
device_api_dynamic.h \
demo.h \
device.h \
misc.h \
device_plot.h
SOURCES += main.cpp\
demo.cpp \
device.cpp \
device_plot.cpp
FORMS += demo.ui
RESOURCES += \
resources.qrc
當我在Qt Creator中(使用Qt 5.7的SDK使用MinGW 5.3在64位的Windows 10系統所有32位)執行qmake
我看到下面的消息:
Project MESSAGE: Application will be built in DEBUG mode
Project MESSAGE: -----------------------------------------------------------------------------------------
Project MESSAGE: MHCP_API root folder set to C:\Program Files (x86)\Device\api
Project MESSAGE: QWT_API root folder set to C:\Qwt-6.1.3
Project MESSAGE: VTK_API root folder set to C:\VTKDebug
Project MESSAGE: -----------------------------------------------------------------------------------------
Project MESSAGE: Found vtkalg-7.0
Project MESSAGE: Found vtkChartsCore-7.0
Project MESSAGE: Found vtkCommonColor-7.0
Project MESSAGE: Found vtkCommonComputationalGeometry-7.0
Project MESSAGE: Found vtkCommonCore-7.0
Project MESSAGE: Found vtkCommonDataModel-7.0
Project MESSAGE: Found vtkCommonExecutionModel-7.0
Project MESSAGE: Found vtkCommonMath-7.0
Project MESSAGE: Found vtkCommonMisc-7.0
Project MESSAGE: Found vtkCommonSystem-7.0
Project MESSAGE: Found vtkCommonTransforms-7.0
Project MESSAGE: Found vtkDICOMParser-7.0
Project MESSAGE: Found vtkDomainsChemistry-7.0
Project MESSAGE: Found vtkDomainsChemistryOpenGL2-7.0
Project MESSAGE: Found vtkexoIIc-7.0
Project MESSAGE: Found vtkexpat-7.0
Project MESSAGE: Found vtkFiltersAMR-7.0
Project MESSAGE: Found vtkFiltersCore-7.0
Project MESSAGE: Found vtkFiltersExtraction-7.0
Project MESSAGE: Found vtkFiltersFlowPaths-7.0
Project MESSAGE: Found vtkFiltersGeneral-7.0
Project MESSAGE: Found vtkFiltersGeneric-7.0
Project MESSAGE: Found vtkFiltersGeometry-7.0
Project MESSAGE: Found vtkFiltersHybrid-7.0
Project MESSAGE: Found vtkFiltersHyperTree-7.0
Project MESSAGE: Found vtkFiltersImaging-7.0
Project MESSAGE: Found vtkFiltersModeling-7.0
Project MESSAGE: Found vtkFiltersParallel-7.0
Project MESSAGE: Found vtkFiltersParallelImaging-7.0
Project MESSAGE: Found vtkFiltersProgrammable-7.0
Project MESSAGE: Found vtkFiltersSelection-7.0
Project MESSAGE: Found vtkFiltersSMP-7.0
Project MESSAGE: Found vtkFiltersSources-7.0
Project MESSAGE: Found vtkFiltersStatistics-7.0
Project MESSAGE: Found vtkFiltersTexture-7.0
Project MESSAGE: Found vtkFiltersVerdict-7.0
Project MESSAGE: Found vtkfreetype-7.0
Project MESSAGE: Found vtkGeovisCore-7.0
Project MESSAGE: Found vtkglew-7.0
Project MESSAGE: Found vtkGUISupportQt-7.0
Project MESSAGE: Found vtkGUISupportQtSQL-7.0
Project MESSAGE: Found vtkImagingColor-7.0
Project MESSAGE: Found vtkImagingCore-7.0
Project MESSAGE: Found vtkImagingFourier-7.0
Project MESSAGE: Found vtkImagingGeneral-7.0
Project MESSAGE: Found vtkImagingHybrid-7.0
Project MESSAGE: Found vtkImagingMath-7.0
Project MESSAGE: Found vtkImagingMorphological-7.0
Project MESSAGE: Found vtkImagingSources-7.0
Project MESSAGE: Found vtkImagingStatistics-7.0
Project MESSAGE: Found vtkImagingStencil-7.0
Project MESSAGE: Found vtkInfovisCore-7.0
Project MESSAGE: Found vtkInfovisLayout-7.0
Project MESSAGE: Found vtkInteractionImage-7.0
Project MESSAGE: Found vtkInteractionStyle-7.0
Project MESSAGE: Found vtkInteractionWidgets-7.0
Project MESSAGE: Found vtkIOAMR-7.0
Project MESSAGE: Found vtkIOCore-7.0
Project MESSAGE: Found vtkIOEnSight-7.0
Project MESSAGE: Found vtkIOExodus-7.0
Project MESSAGE: Found vtkIOExport-7.0
Project MESSAGE: Found vtkIOGeometry-7.0
Project MESSAGE: Found vtkIOImage-7.0
Project MESSAGE: Found vtkIOImport-7.0
Project MESSAGE: Found vtkIOInfovis-7.0
Project MESSAGE: Found vtkIOLegacy-7.0
Project MESSAGE: Found vtkIOLSDyna-7.0
Project MESSAGE: Found vtkIOMINC-7.0
Project MESSAGE: Found vtkIOMovie-7.0
Project MESSAGE: Found vtkIONetCDF-7.0
Project MESSAGE: Found vtkIOParallel-7.0
Project MESSAGE: Found vtkIOParallelXML-7.0
Project MESSAGE: Found vtkIOPLY-7.0
Project MESSAGE: Found vtkIOSQL-7.0
Project MESSAGE: Found vtkIOVideo-7.0
Project MESSAGE: Found vtkIOXML-7.0
Project MESSAGE: Found vtkIOXMLParser-7.0
Project MESSAGE: Found vtkjpeg-7.0
Project MESSAGE: Found vtkjsoncpp-7.0
Project MESSAGE: Found vtkxml2-7.0
Project MESSAGE: Found vtkmetaio-7.0
Project MESSAGE: Found vtkNetCDF-7.0
Project MESSAGE: Found vtkNetCDF_cxx-7.0
Project MESSAGE: Found vtkoggtheora-7.0
Project MESSAGE: Found vtkParallelCore-7.0
Project MESSAGE: Found vtkpng-7.0
Project MESSAGE: Found vtkproj4-7.0
Project MESSAGE: Found vtkRenderingAnnotation-7.0
Project MESSAGE: Found vtkRenderingContext2D-7.0
Project MESSAGE: Found vtkRenderingContextOpenGL2-7.0
Project MESSAGE: Found vtkRenderingCore-7.0
Project MESSAGE: Found vtkRenderingFreeType-7.0
Project MESSAGE: Found vtkRenderingImage-7.0
Project MESSAGE: Found vtkRenderingLabel-7.0
Project MESSAGE: Found vtkRenderingLOD-7.0
Project MESSAGE: Found vtkRenderingOpenGL2-7.0
Project MESSAGE: Found vtkRenderingQt-7.0
Project MESSAGE: Found vtkRenderingVolume-7.0
Project MESSAGE: Found vtkRenderingVolumeOpenGL2-7.0
Project MESSAGE: Found vtksys-7.0
Project MESSAGE: Found vtkTestingGenericBridge-7.0
Project MESSAGE: Found vtkTestingIOSQL-7.0
Project MESSAGE: Found vtkTestingRendering-7.0
Project MESSAGE: Found vtktiff-7.0
Project MESSAGE: Found vtkverdict-7.0
Project MESSAGE: Found vtkViewsContext2D-7.0
Project MESSAGE: Found vtkViewsCore-7.0
Project MESSAGE: Found vtkViewsInfovis-7.0
Project MESSAGE: Found vtkViewsQt-7.0
Project MESSAGE: Found vtkz-7.0
Project MESSAGE: Found vtkhdf5-7.0
Project MESSAGE: Found vtkhdf5_hl-7.0
Project MESSAGE: -----------------------------------------------------------------------------------------
Project MESSAGE: Appending -LC:\Qwt-6.1.3\lib -lqwtd -LC:\Program Files (x86)\Device\api\lib -ldevice_apid -LC:\VTKDebug\bin -lvtkalg-7.0 -lvtkChartsCore-7.0 -lvtkCommonColor-7.0 -lvtkCommonComputationalGeometry-7.0 -lvtkCommonCore-7.0 -lvtkCommonDataModel-7.0 -lvtkCommonExecutionModel-7.0 -lvtkCommonMath-7.0 -lvtkCommonMisc-7.0 -lvtkCommonSystem-7.0 -lvtkCommonTransforms-7.0 -lvtkDICOMParser-7.0 -lvtkDomainsChemistry-7.0 -lvtkDomainsChemistryOpenGL2-7.0 -lvtkexoIIc-7.0 -lvtkexpat-7.0 -lvtkFiltersAMR-7.0 -lvtkFiltersCore-7.0 -lvtkFiltersExtraction-7.0 -lvtkFiltersFlowPaths-7.0 -lvtkFiltersGeneral-7.0 -lvtkFiltersGeneric-7.0 -lvtkFiltersGeometry-7.0 -lvtkFiltersHybrid-7.0 -lvtkFiltersHyperTree-7.0 -lvtkFiltersImaging-7.0 -lvtkFiltersModeling-7.0 -lvtkFiltersParallel-7.0 -lvtkFiltersParallelImaging-7.0 -lvtkFiltersProgrammable-7.0 -lvtkFiltersSelection-7.0 -lvtkFiltersSMP-7.0 -lvtkFiltersSources-7.0 -lvtkFiltersStatistics-7.0 -lvtkFiltersTexture-7.0 -lvtkFiltersVerdict-7.0 -lvtkfreetype-7.0 -lvtkGeovisCore-7.0 -lvtkglew-7.0 -lvtkGUISupportQt-7.0 -lvtkGUISupportQtSQL-7.0 -lvtkImagingColor-7.0 -lvtkImagingCore-7.0 -lvtkImagingFourier-7.0 -lvtkImagingGeneral-7.0 -lvtkImagingHybrid-7.0 -lvtkImagingMath-7.0 -lvtkImagingMorphological-7.0 -lvtkImagingSources-7.0 -lvtkImagingStatistics-7.0 -lvtkImagingStencil-7.0 -lvtkInfovisCore-7.0 -lvtkInfovisLayout-7.0 -lvtkInteractionImage-7.0 -lvtkInteractionStyle-7.0 -lvtkInteractionWidgets-7.0 -lvtkIOAMR-7.0 -lvtkIOCore-7.0 -lvtkIOEnSight-7.0 -lvtkIOExodus-7.0 -lvtkIOExport-7.0 -lvtkIOGeometry-7.0 -lvtkIOImage-7.0 -lvtkIOImport-7.0 -lvtkIOInfovis-7.0 -lvtkIOLegacy-7.0 -lvtkIOLSDyna-7.0 -lvtkIOMINC-7.0 -lvtkIOMovie-7.0 -lvtkIONetCDF-7.0 -lvtkIOParallel-7.0 -lvtkIOParallelXML-7.0 -lvtkIOPLY-7.0 -lvtkIOSQL-7.0 -lvtkIOVideo-7.0 -lvtkIOXML-7.0 -lvtkIOXMLParser-7.0 -lvtkjpeg-7.0 -lvtkjsoncpp-7.0 -lvtkxml2-7.0 -lvtkmetaio-7.0 -lvtkNetCDF-7.0 -lvtkNetCDF_cxx-7.0 -lvtkoggtheora-7.0 -lvtkParallelCore-7.0 -lvtkpng-7.0 -lvtkproj4-7.0 -lvtkRenderingAnnotation-7.0 -lvtkRenderingContext2D-7.0 -lvtkRenderingContextOpenGL2-7.0 -lvtkRenderingCore-7.0 -lvtkRenderingFreeType-7.0 -lvtkRenderingImage-7.0 -lvtkRenderingLabel-7.0 -lvtkRenderingLOD-7.0 -lvtkRenderingOpenGL2-7.0 -lvtkRenderingQt-7.0 -lvtkRenderingVolume-7.0 -lvtkRenderingVolumeOpenGL2-7.0 -lvtksys-7.0 -lvtkTestingGenericBridge-7.0 -lvtkTestingIOSQL-7.0 -lvtkTestingRendering-7.0 -lvtktiff-7.0 -lvtkverdict-7.0 -lvtkViewsContext2D-7.0 -lvtkViewsCore-7.0 -lvtkViewsInfovis-7.0 -lvtkViewsQt-7.0 -lvtkz-7.0 -lvtkhdf5-7.0 -lvtkhdf5_hl-7.0
到目前爲止,這麼好。如前所述事情不能在鏈接階段即出現以下錯誤
cannot find -lvtkalg-7.0
cannot find -lvtkxml2-7.0
cannot find -lvtkz-7.0
即使我可以清楚地看到他們在輸出qmake
:
Project MESSAGE: Appending -LC:\Qwt-6.1.3\lib
-lqwtd -LC:\Program Files (x86)\Device\api\lib -ldevice_apid
-LC:\VTKDebug\bin -lvtkalg-7.0 ... -lvtkxml2-7.0 .. -lvtkz-7.0
我懷疑,這實際上有什麼關係與VTK本身,而是與我的項目的結構。
編輯:我已經找到了原因,但不知道如何解決它。基本上提到的文件有命名傳送libvtkNAMElib-7.0
。所以當我做$$replace(BASENAME, lib,)
都lib
子串被刪除,離開我vtkNAME-7.0
這不存在。我在資源管理器中查看上述DLL文件時發現了這一點,並注意到這種麻煩。我現在正在尋找一種方法來替換子字符串的第一次出現。
PS:我很不高興VTK工具包是如何管理文件結構的。對於開發人員來說,庫文件的命名約定似乎並不重要(本評論沒有任何意圖)。 : -/