【问题标题】:QT6+VTK9.1 on Windows build error: Undefined Reference to QVTKOpenGLStereoWidgetWindows 上的 QT6+VTK9.1 构建错误:未定义对 QVTKOpenGLStereoWidget 的引用
【发布时间】:2022-11-09 07:40:43
【问题描述】:

我已经安装了 QT6 并成功构建了 VTK 9.1。我添加了以下环境变量:

%QTDIR%\bin
%QTDIR%\lib
%VTK_DIR%\bin

其中QTDIR 指向C:\Qt\6.2.3\msvc2019_64VTK_DIR 指向C:\VTK构建后安装VTK的位置。 VTK_DIR 包含 bin、include 和 lib 目录。

在里面项目.pro文件,我添加了以下内容:

QT += core gui opengl
...
INCLUDEPATH += $$(VTK_DIR)/include/vtk-9.1
LIBS += -LC:$$(VTK_DIR)/lib

我没有收到任何丢失的头文件错误,这意味着 QT Creator 找到了头文件。该项目在 QT Creator 中运行良好,无需添加OpenGL 小部件到表格。但是当我添加OpenGL 小部件到表格,它给出了以下错误:

17:16:06: Running steps for project VTKTest...
17:16:06: Configuration unchanged, skipping qmake step.
17:16:06: Starting: "C:\Qt\Tools\mingw900_64\bin\mingw32-make.exe" -j12
C:/Qt/6.2.3/mingw_64/bin/qmake.exe -o Makefile ../VTKTest/VTKTest.pro -spec win32-g++ CONFIG+=debug CONFIG+=qml_debug
C:/Qt/Tools/mingw900_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/Work/Qt/Creator/build-VTKTest-Desktop_Qt_6_2_3_MinGW_64_bit-Debug'
g++ -Wl,-subsystem,windows -mthreads -o debug/VTKTest.exe debug/main.o debug/mainwindow.o debug/moc_mainwindow.o  -LC:C:/VTK/lib C:/Qt/6.2.3/mingw_64/lib/libQt6OpenGL.a C:/Qt/6.2.3/mingw_64/lib/libQt6Widgets.a C:/Qt/6.2.3/mingw_64/lib/libQt6Gui.a C:/Qt/6.2.3/mingw_64/lib/libQt6Core.a -lmingw32 C:/Qt/6.2.3/mingw_64/lib/libQt6EntryPoint.a -lshell32  
C:/Qt/Tools/mingw900_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/mainwindow.o: in function `Ui_MainWindow::setupUi(QMainWindow*)':
C:\Test\build-VTKTest-Desktop_Qt_6_2_3_MinGW_64_bit-Debug/./ui_mainwindow.h:33: undefined reference to `__imp__ZN22QVTKOpenGLStereoWidgetC1EP7QWidget6QFlagsIN2Qt10WindowTypeEE'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [Makefile.Debug:72: debug/VTKTest.exe] Error 1
mingw32-make[1]: Leaving directory 'C:/Test/build-VTKTest-Desktop_Qt_6_2_3_MinGW_64_bit-Debug'
mingw32-make: *** [Makefile:45: debug] Error 2
17:16:12: The process "C:\Qt\Tools\mingw900_64\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project VTKTest (kit: Desktop Qt 6.2.3 MinGW 64-bit)
When executing step "Make"
17:16:12: Elapsed time: 00:06.

我也试过LIBS += $$(VTK_DIR)/libLIBS += $$(VTK_DIR)/lib/*.lib,不高兴。

在 VS2019 中,我安装了QT VS 工具效果很好。我还在项目 VC++ 目录部分添加了所有的 VTK 包含、lib 和 bin 目录。无需添加OpenGL 小部件到项目运行良好的形式。但是当我添加时也在这里OpenGL 小部件对于表单,它给了我以下构建错误:

Build started...
1>------ Build started: Project: VTKTest, Configuration: Debug x64 ------
1>Reading Qt configuration (C:/Qt/6.2.3/msvc2019_64/bin/qmake)
1>VTKTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QVTKOpenGLStereoWidget::QVTKOpenGLStereoWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QVTKOpenGLStereoWidget@@QEAA@PEAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z) referenced in function "public: void __cdecl Ui_VTKTestClass::setupUi(class QMainWindow *)" (?setupUi@Ui_VTKTestClass@@QEAAXPEAVQMainWindow@@@Z)
1>VTKTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl QVTKOpenGLStereoWidget::~QVTKOpenGLStereoWidget(void)" (__imp_??1QVTKOpenGLStereoWidget@@UEAA@XZ) referenced in function "public: virtual void * __cdecl QVTKOpenGLStereoWidget::`scalar deleting destructor'(unsigned int)" (??_GQVTKOpenGLStereoWidget@@UEAAPEAXI@Z)
1>VTKTest.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl QVTKOpenGLStereoWidget::metaObject(void)const " (?metaObject@QVTKOpenGLStereoWidget@@UEBAPEBUQMetaObject@@XZ)
1>VTKTest.obj : error LNK2001: unresolved external symbol "protected: virtual void __cdecl QVTKOpenGLStereoWidget::paintEvent(class QPaintEvent *)" (?paintEvent@QVTKOpenGLStereoWidget@@MEAAXPEAVQPaintEvent@@@Z)
1>VTKTest.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl QVTKOpenGLStereoWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QVTKOpenGLStereoWidget@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
1>VTKTest.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl QVTKOpenGLStereoWidget::qt_metacast(char const *)" (?qt_metacast@QVTKOpenGLStereoWidget@@UEAAPEAXPEBD@Z)
1>VTKTest.obj : error LNK2001: unresolved external symbol "protected: virtual void __cdecl QVTKOpenGLStereoWidget::resizeEvent(class QResizeEvent *)" (?resizeEvent@QVTKOpenGLStereoWidget@@MEAAXPEAVQResizeEvent@@@Z)
1>C:\Test\VTKTest\x64\Debug\VTKTest.exe : fatal error LNK1120: 7 unresolved externals
1>Done building project "VTKTest.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

似乎 QT Creator 和 VS2019 都找不到运行时库(在本例中为 QVTKOpenGLStereoWidget)。我尝试了许多帖子、问题、视频和教程,但问题没有解决。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c++ vtk undefined-reference qtwidgets qt6


    【解决方案1】:

    LIBS 不仅应该包含路径,还应该包含要链接的库。尚未在 Windows/Qt6 上测试我的代码,但在 Linux/Qt5 上,当您指定链接 libvtkGUISupportQt 时,所有必要的 VTK 库都会自动链接。所以你可以尝试这样的事情:

    LIBS += $$(VTK_DIR)/lib -lvtkGUISupportQt
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-31
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多