QCAD v3.28.1.3源码编译,使用VS2019+Qt5.15.2环境

几年前写过一篇博文:《QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境》

https://blog.csdn.net/libaineu2004/article/details/100217789

https://github.com/qcad/qcad

https://gitee.com/mirrors/qcad

现在qcad版本也一直更新,于是决定使用VS2019再写一篇编译教程。

一、先说新版本spatialindexnavel的编译问题

从v3.28.2.0开始到目前2025年12月份的最新版v3.32.4.4,都有legacy文件夹,

\src\3rdparty\legacy\存放了老版本的opennurbs和spatialindexnavel

\src\3rdparty\存放了新版本的opennurbs和spatialindexnavel

但是我使用vs2019编译新版本的spatialindexnavel会出错

1>Buffer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __cdecl SpatialIndex::StorageManager::IBuffer::~IBuffer(void)" (_imp??1IBuffer@StorageManager@SpatialIndex@@UEAA@XZ),函数 "public: virtual __cdecl SpatialIndex::StorageManager::Buffer::~Buffer(void)" (??1Buffer@StorageManager@SpatialIndex@@UEAA@XZ) 中引用了该符号

1>Buffer.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl SpatialIndex::StorageManager::IBuffer::IBuffer(void)" (_imp??0IBuffer@StorageManager@SpatialIndex@@QEAA@XZ),函数 "public: __cdecl SpatialIndex::StorageManager::Buffer::Buffer(class SpatialIndex::IStorageManager &,class Tools::PropertySet &)" (??0Buffer@StorageManager@SpatialIndex@@QEAA@AEAVIStorageManager@2@AEAVPropertySet@Tools@@@Z) 中引用了该符号

1>Tools.obj : error LNK2001: 无法解析的外部符号 "public: __cdecl Tools::Exception::Exception(class Tools::Exception const &)" (??0Exception@Tools@@QEAA@AEBV01@@Z)

1>Region.obj : error LNK2001: 无法解析的外部符号 "public: __cdecl Tools::Exception::Exception(class Tools::Exception const &)" (??0Exception@Tools@@QEAA@AEBV01@@Z)

1>Statistics.obj : error LNK2001: 无法解析的外部符号 "public: __cdecl Tools::Exception::Exception(class Tools::Exception const &)" (??0Exception@Tools@@QEAA@AEBV01@@Z)

1>TimePoint.obj : error LNK2001: 无法解析的外部符号 "public: __cdecl Tools::Exception::Exception(class Tools::Exception const &)" (??0Exception@Tools@@QEAA@AEBV01@@Z)

1>TimeRegion.obj : error LNK2001: 无法解析的外部符号 "public: __cdecl Tools::Exception::Exception(class Tools::Exception const &)" (??0Exception@Tools@@QEAA@AEBV01@@Z)

......

1>..\..\..\debug\\spatialindexnavel.dll : fatal error LNK1120: 105 个无法解析的外部命令

1>已完成生成项目"spatialindexnavel.vcxproj"的操作 - 失败。

========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

由于该问题无法解决,本人就无法使用VS2019去编译新版本qcad源码了。

只能选择最近的,且没有legacy文件夹的版本,v3.28.1.3。

二、编译v3.28.1.3的过程

1、在VS2019的主菜单-扩展-打开Qt VS Tools,并选择Open Qt Project File(.pro)。

打开\qcad-v3.28.1.3\qcad-v3.28.1.3\qcad.pro

会自动生成解决方案文件\qcad-v3.28.1.3\qcad-v3.28.1.3\qcadqcad.sln

然后使用VS2019打开这个sln文件

2、修复几处错误或遗漏

在main.cpp新增头文件#include <locale>

qcadcmd.com删除【生成后事件】的命令行和说明

3、一键编译,成功

4、然后再vs2019打开这个文件

\qcad-v3.28.1.3\qcad-v3.28.1.3\src\3rdparty\qt-labs-qtscriptgenerator-5.15.2\qcadqt-labs-qtscriptgenerator-5.sln

一键编译,成功

5、运行\qcad-v3.28.1.3\qcad-v3.28.1.3\debug\qcad.exe,成功

6、\qcad-v3.28.1.3\qcad-v3.28.1.3\plugins\

该路径会有编译生成的插件文件,debug模式编译,会自动加上后缀_debug

qcaddxf_debug.dll

qcadscripts_debug.dll

插件加载的的源码在RPluginLoader.cpp

\qcad-v3.28.1.3\qcad-v3.28.1.3\src\core\RPluginLoader.cpp

三、编译v3.28.1.3可能遇到的问题及解决办法

1、error MSB8066,debug\moc_predefs.h.cbt

解决办法:鼠标右键选定具体的项目,Qt,convert custom build steps to Qt/MSBuild

2、v3.28.1.3中文界面翻译很烂

解决办法:使用2025年12月的版本v3.32.4.4的ts文件夹替换v3.28.1.3版本的ts文件夹

\qcad-v3.28.1.3\qcad-v3.28.1.3\ts

然后重新编译。ok。

相关推荐
Akir.weiwen3 天前
⑤ 消费格式差异:同一份契约的四角色消费格式
人工智能·编译·设计规范·语义
泛联新安3 天前
FPGA功能仿真:VShark正式亮相,换仿真器不用换习惯
fpga开发·编译·仿真·嵌入式软件·代码漏洞扫描
Akir.weiwen13 天前
③ 约束显化:把隐含的语义假设变成显式规则
人工智能·编译·设计规范·语义
深念Y16 天前
Makefile vs go run:Go 项目构建方式对比
java·开发语言·golang·k8s·编译·流水线·cicd
淡海水18 天前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
淡海水19 天前
03-05-线性-Array-List-LinkedList与Span-所有权与成本模型选型
c#·list·编译·array·clr·机器码
淡海水20 天前
03-03-线性-LinkedList-T-源码不变式与选择边界
windows·链表·c#·编译·linkedlist·clr·机器码
深念Y21 天前
SSD 寿命洁癖:编译过程不入盘的原则与实践
缓存·io·内存·编译·ssd·读取·写入
淡海水21 天前
03-02-线性-List-T-动态数组布局-扩容与操作成本
数据结构·windows·c#·list·编译·clr·机器码
拂拉氏21 天前
【Linux】 编译与动静态库相关
linux·编译·动静态库