说明
鉴于很多筒子们都开始用 cygwin/mingw 来编译 CuraEngine,以及用 VS 编译 CuraEngine 的各种问题,尝试了用 cygwin64 来编译。
用 unix 编译环境在 windows 下编译 CuraEngine 的好处如下:
- 基本不需要修改源码。
- 可以随时与官网库同步。
- VS 收费(当然这不算好处)
几个注意点
- 本教程用 cygwin 编译 CuraEngine,还是非常顺利的,比 VS 要简单很多。
- 有人觉得 mingw 也可以用来编译 CuraEngine,这里并不推荐。因为 mingw 的 gcc 版本目前只到 4.8.1(至少我下载的版本最高只有 4.8.1),而 CuraEngine 的最新版貌似用到了 4.9,我就不担保不出现什么诡异的问题了。
如果一定要用 mingw 的话,切记要用 mingw 的 POSIX 版本,用 POSIX 版本,用 POSIX 版本(重要的事情说三遍),为什么呢?因为在 mingw 的其他版本中对 thread 的库不完全支持,mutex 文件使用时会出错。而 libArcus 正好用到了这个(不要问我为什么会知道。。。)。 - cygwin 现在最新版好像已经支持中文了,不过最好还是将 cygwin 安装在英文目录下,将环境变量添加进去。安装盘空间需要足够大,我安装了包含所有组件的 cygwin64 用了 50 多 GB(当然编译 curaengine 不需要完整安装)。
- 测试环境 win10 64 位中文专业版,DELL inspiron 17R,你可能需要额外安装 perl,cmake,python,git 等(我的之前就有)。
推荐软件
- cygwin 我用的是下面版本,最新 gcc 已经到了 4.9.3 \\更新我选的是 from internet and install,学校的教育网网速比较快。
- cmake https://cmake.org/ ,版本越新越好
- ConEmu http://www.softpedia.com/get/System/System-Miscellaneous/ConEmu.shtml
【以下软件不必须】 模拟了 windows 下终端的功能,可以在里面运行 cygwin。 - Wox http://www.getwox.com/ 类似于 mac os 下的 Alfred,用来快速启动程序。
- spacemacs! https://github.com/syl20bnr/spacemacs 极力推荐。emacser 和 vimer 都会喜欢的。之前用 vs 版本的 cuaengine 因为一直找不到一个顺手的 IDE,现在已经没有任何理由用 VS 了。 spacemacs 是 emacs+一个完美的配置文件。emacs 入门门槛较高,但是一旦使用会受益终生。
- Zeal http://zealdocs.org/ 类似于 mac os 下地 Dash,可以配合 spacemacs 查看说明文档。跟 vs 的 f1 键功能差不多哦呵呵。
编译 CuraEngine
说明
https://github.com/Ultimaker/CuraEngine 其实就是按照官方的说明一步一步来,期间需要自己改正一些错误(由于 cygwin 没能完全模拟 unix 环境)
编译 protobuf
编译 libArcus 库
编译 CuraEngine 库
以上图片是最终编译成功以后的结果。make 过程中有几处错误,需要自己修改 CuraEngine 的源码。
- commandSocket.cpp
if (setting.name() == "extruder_nr") //192 行 { extruder_train_nr = std::stoi(setting.value()); break; }
改成:
if (setting.name() == "extruder_nr") { std::string temp = setting.value(); extruder_train_nr = strtol(temp.c_str(),0,10); }
- settingRegistry.cpp
SettingConfig& child = category_trains.getOrCreateChild(std::to_string(train_nr), std::string("Extruder ") + std::to_string(train_nr)); //205 行
改成:
std::ostringstream os; os << train_nr; SettingConfig& child = category_trains.getOrCreateChild(os.str(), std::string("Extruder ") + os.str());
- main.cpp
port = std::stoi(ip_port.substr(ip_port.find(':') + 1).data()); //77 行
改成:
std::string temp = ip_port.substr(ip_port.find(':') + 1).data(); port = strtol(temp.c_str(),0,10);
运行 CuraEngine.exe
1、通过cygwin的环境运行。在cygwin环境下,curaengine的build目录输入
./CuraEngine [参数表]
2、在windows环境下运行。
需要先拷贝\cygwin64\usr\local\bin里面的cygArcus-1.dll、cygprotobuf-10.dll ,和 \cygwin64\bin里面的cyggcc_s-seh-1.dll、cygstdc++-6.dll、cygwin1.dll、cygz.dll到CuraEngine.exe所在的目录下。这样就可以用windows下的命令行运行了。命令:
CuraEngine.exe [参数表]