You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:07:36