QMake转CMake的Qt子目录项目出现Q_OBJECT虚表未定义引用错误
Qt CMake子目录项目共享库链接错误:未定义
vtable for CommonLib 我有一个测试用Qt子目录项目,用qmake可正常运行,现在转成CMake项目(参考已有非Qt的CMake子目录项目),构建共享库时出现以下链接错误:
C:/Users/cance/dev/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: common-lib/CMakeFiles/common.dir/src/commonlib.cpp.obj:commonlib.cpp:(.rdata$.refptr._ZTV9CommonLib[.refptr._ZTV9CommonLib]+0x0): undefined reference to `vtable for CommonLib'
项目目录结构如下:
project/ ├── CMakeLists.txt ├── cmake-common/ │ ├── cmake-lib-macros.cmake │ └── CMakeLists.txt └── common-lib/ ├── CMakeLists.txt ├── common-config.cmake.in ├── include/ │ ├── commonlib.h │ ├── common-lib_global.h │ └── logger.h └── src/ ├── commonlib.cpp └── logger.cpp
根目录CMakeLists.txt已设置CMAKE_AUTOMOC ON,并引入了cmake-common中的复用宏configure_lib,common-lib通过该宏构建库。测试用CommonLib类包含Q_OBJECT宏、信号与槽,注释掉这些相关代码后可正常编译链接,仅保留Q_OBJECT宏也会触发错误,怀疑MOC未生成但已开启自动MOC功能,使用Qt 6.5.1版本。
完整编译输出:
[0/2 ?/sec] Re-checking globbed directories... [1/5 9.4/sec] Automatic MOC and UIC for target common [2/5 13.0/sec] Building CXX object common-lib/CMakeFiles/common.dir/common_autogen/mocs_compilation.cpp.obj [3/5 2.4/sec] Building CXX object common-lib/CMakeFiles/common.dir/src/logger.cpp.obj [4/5 3.1/sec] Building CXX object common-lib/CMakeFiles/common.dir/src/commonlib.cpp.obj [5/5 3.6/sec] Linking CXX shared library common.dll FAILED: common.dll common-lib/libcommon.dll.a cmd.exe /C "cd . && C:\Users\cance\dev\Qt\Tools\mingw1120_64\bin\g++.exe -g -shared -o common.dll -Wl,--out-implib,common-lib\libcommon.dll.a -Wl,--major-image-version,0,--minor-image-version,0 common-lib/CMakeFiles/common.dir/common_autogen/mocs_compilation.cpp.obj common-lib/CMakeFiles/common.dir/src/commonlib.cpp.obj common-lib/CMakeFiles/common.dir/src/logger.cpp.obj C:/Users/cance/dev/Qt/6.5.1/mingw_64/lib/libQt6Core.a -lmpr -luserenv -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ." C:/Users/cance/dev/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: common-lib/CMakeFiles/common.dir/src/commonlib.cpp.obj:commonlib.cpp:(.rdata$.refptr._ZTV9CommonLib[.refptr._ZTV9CommonLib]+0x0): undefined reference to `vtable for CommonLib' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed. 19:33:33: The process "C:\Users\cance\dev\Qt\Tools\CMake_64\bin\cmake.exe" exited with code 1. Error while building/deploying project xTrackCadQt (kit: Desktop Qt 6.5.1 MinGW 64-bit) When executing step "Build"
内容的提问来源于stack exchange,提问作者cancech
相关产品推荐
相关产品推荐

