不依赖官方LibPack编译FreeCAD的一次尝试
在Windows下编译FreeCAD,通常的方法是依赖官方提供的LibPack,但是只有vs2008, vs2012, vs2013等几个版本提供。比如现在感觉vs2017比较好用,可是没有官方LibPack,那就很难在vs2017上编译FreeCAD。
我不想再因为想看看FreeCAD源码,而去安装一个visual studio,不如探索一下,如何不依赖官方LibPack,生成出vs2017的工程项目。
方向确定了,那就干起来呗。给cmake传入FREECAD_LIBPACK_USE变量值为 OFF,关闭使用官方LibPack。看看会因为缺少哪些依赖库而无法通过编译。
第一个库是 Python,需要确保在PATH路径中找到 Python可执行程序。如果电脑安装过python,cmake也会通过注册表查找。建议采用python3,如果想要debug,那么就必须有debug的python dll。通常的python安装版默认是不带的,可以在安装时选择需要debug的,估计这样会从官网下载还是怎么的,反正我在一台电脑上安装如果要debug,就总是安装失败,但是另外一台电脑却可以安装成功。不知道这是什么原因。也可以直接下载python源码,里边有个PCBuild目录,vs编译不会太难。只是我也不怎么熟悉python,从源码再安装,不知道那些文件应该怎么放,也懒得比较了。
第二个库是 boost,会由于找不到boost而无法继续cmake,可以设置 BOOST_ROOT 指向 boost 安装位置。在这里有个提醒的是,从boost1.65还是哪个版本开始,boost.python的dll有所不同,在 src/Mod/Path/area 有个find_package( Boost COMPONENTS python${BOOST_PY_SUFFIX} ) 按命名查找,好像比较容易查找。推荐 boost1.68以上。这里好像对cmake版本也有要求,我原来是3.9,后面升到3.14.1了。
第三个库是 Xerces-C,这个库是读写xml文件的,没有预编译的二进制库可供下载,得去官网下载自己编译。cmake编译这个库没有什么问题。
再就是 zlib,直接使用opencascade第三方库里的就可以了,可以设计通过定义 ZLIB_ROOT 让 cmake 找到它。
FreeType,缺少这个,并不会影响cmake生成工程项目文件,只是提示 "Part module will lack of makeWireString()",就是 src/Mod/Part 里的 Part::Module 会缺少 makeWireString() 函数的实现。
Eigen3,缺少它,也不会影响cmake生成工程项目文件吧,但是会关闭 flatmesh 模块的生成。不过Eigen3是纯C++头文件使用的,添加上并不麻烦。
OpenCASCADE,从最新版7.3.0编译出来,再设法让cmake找到它。
还有 Coin3D,这是FreeCAD在显示方面所依赖的库。有个 pivy 是对 Coin3D 的python捆绑,在FreeCAD的github库里有,但是 python pip 不能安装。
还有 Qt,没有这个,就得不到UI界面了。不建议Qt4了,给 cmake 传入 BUILD_QT5 为ON 启用Qt5的编译。
PySide2,这是Python对Qt5的捆绑。有些模块会使用 pyside2-rcc.exe 去生成 Qt的资源文件qrc,缺少它的话,在这些地方会编译失败。可以通过 python 的pip 安装 PySide2。
MedFile,认为这个库很不常见,如果打开 FREECAD_USE_EXTERNAL_SMESH,就不需要 MedFile 了,可以通过 salome找到 med 的源码;还有netgen, hdf5等很多库,数量不少,都是网格方面的,为求简便,也就不追求生成出所有的模块,所以这些都还是跳过吧。如果真的有切实需要,再来处理它们。
当前状态与结果
最终结果存储在 我的github-FreeCAD fork,develop分支的 vsbuild 目录,执行脚本 buildscript_vs2017.bat 叠加源码同级目录 FreeCAD-LibPack 可以得到vs2017的工程项目文件。
为了得到这些工程,关闭了不少模块,在运行时也还有问题。这些问题主要出在python方面,最典型的是找不到 shiboken2。
对 FreeCAD 的感觉是,在很多的地方都会借助 python 来辅助搭建,比如导入dxf。现在发现好多库都有 python 捆绑,比如vtk,ifcopenshell等等,好像这个世界是 python 的了。
佩服 python,有点酸溜溜,但是也得指明在这些地方,底层还都是C++。我觉得FreeCAD如果可以不依赖 python,只是在C++之上提供对 Python 的接口,整个源码是不是会更纯洁好理解一些。
导入dxf
导入dxf是在 Mod/Draft 内定义的,语句 App.addImportType("Autodesk DXF 2D (*.dxf)","importDXF") 表明导入dxf文件会由 importDXF 模块来完成,这对应的是 importDXF.py 文件。看了一下这里的源码,可以发现它又要从另外一个地方下载似的。
importDXF.py 里边全部是Python语句,但事实上 Draft/App 之下又存有 C++版的 dxf 格式读写,看起来是向 Heeks 借用的 dxf.h/dxf.cpp。importDXF.py 里在某种情况会调用 C++版的,但是我没成功执行过,原因是缺少 shiboken2,这个我恼火的是我已经在 Python 那里安装 PySide2 时会有 shiboken2 呀,为什么找不到呢。当然为了保持依赖库在同一个地方(除了Qt之外),我将 Python 拷贝在 FreeCAD-LibPack/Python 里边,同时电脑 C 盘目录之下还有一个python。
题外话
刚刚发现 FreeCAD 官方在发布 19_pre 时提供了 FreeCADLibs_12.1.2_x64_VC15.7z ,估计 vs2017 也可以使用 官方 LibPack 了。
不依赖官方LibPack编译FreeCAD的一次尝试的更多相关文章
- 01按照官方步骤编译NanoPiM1Plus的Android
01按照官方步骤编译NanoPiM1Plus的Android 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/6 10:58 版本:V1.0 ...
- 我写的一个Qt 显示二维码( QR Code)的控件(可以去掉对 libpthread 的依赖,而且编译出的库文件可以在 vc2010 的release 模式下使用)
最近一个项目需要显示二维码,所以花了点时间(只用了一个晚上,写的很不完善),写了个显示二维码的控件.当然这个控件用到了些开源的代码,比如qrencode,所以我也打算把我的代码开源. 我的代码参考了 ...
- idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在,已解决
idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在 1. 报错具体情况 2. Project Structure中的Libraries没有任何红色波浪线 3. 发现自己要引 ...
- (2)RGB-D SLAM系列- 工具篇(依赖库及编译)
做了个SLAM的小视频,有兴趣的朋友可以看下 https://youtu.be/z5wDzMZF10Q 1)Library depended 一个完整的SLAM系统包括,数据流获取,数据读取,特征提取 ...
- java-cef系列视频第一集:从官方代码编译
本视频介绍了如何从官方给出步骤编译java-cef代码,生成可运行可移植的发行版. 值得一提的是:截至2016-09-24java-cef代码编译方式有所改变,读者请自行查看bitbucket上关于编 ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- Makeflie自动生成依赖,自动化编译
在netbeans里开发,有一个重要文件makefile,是用来编译所有的文件. 项目的目录结构如下,扁平的目录结构,如何实现自动化编译,写makefile呢? 第一版 基础版: CC = g++ C ...
- maven相互依赖导致无法编译成功
起初是新加了个模块,启动前编译时error,提示找不到依赖模块的类,但java文件上是没有报错的. 后经过排查,发现是循环依赖导致的此问题. 如图,弹出框中有循环依赖的模块会显示红色,右键Open M ...
- 【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法
如图片所示,提示是没有找到cmake命令.看来是需要camke软件支持的,由于当初安装CMake后我重装了系统,也没有把cmake的bin路径 解决办法一:重新安装CMake,并勾选上"ad ...
随机推荐
- spinand之data buffer
data buffer简介 spinand一般会有一个内置的data buffer. 以W25N01GV为例,一个page是2048bytes外加64bytes的spare数据,其data buffe ...
- Maven发布封装到中央仓库时候报错:no default secret key: No secret key
今天因为发布swagger-spring-boot-starter做一个问题的修复,然后碰到了下面这个问题,记录一下解决过程,帮助后续碰到类似问题的童鞋: *gpg: WARNING: "- ...
- COSCon'19 | 如何设计新一代的图数据库 Nebula
11 月 2 号 - 11 月 3 号,以"大爱无疆,开源无界"为主题的 2019 中国开源年会(COSCon'19)正式启动,大会以开源治理.国际接轨.社区发展和开源项目为切入点 ...
- JPA中实现单向一对多的关联关系
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- JavaScript 基于offsetHeight和clientHeight判断是否出现滚动条
基于offsetHeight和clientHeight判断是否出现滚动条 by:授客 QQ:1033553122 HTMLEelement.offsetHeight简介 HTMLElement.o ...
- LeetCode刷题191125
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 今天状态不好,划一下水. 算法: 给定一个整数数组 nums 和一个目标 ...
- 并发编程~~~协程~~~greenlet模块, gevent模块
一 协程 1. 协程: 单线程下的并发,又称微线程,纤程.协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 并发真正的核心: 切换并且保持状态. 开启协程并发的执行,自己的程序把控着C ...
- Test Case:: 12C ASM New feature (Doc ID 1571975.1)
Test Case:: 12C ASM New feature (Doc ID 1571975.1) APPLIES TO: Oracle Database - Enterprise Edition ...
- Vm虚拟机最小化安装linux并配置NAT网络连接(全图)