跳到内容

OpenSCAD 用户手册/在 Linux/UNIX 上构建

来自维基教科书,开放世界中的开放书籍

预建二进制软件包

[编辑 | 编辑源代码]

如果您幸运,您将不必构建它。许多 Linux 和 BSD 系统都具有预建的 OpenSCAD 软件包,包括 Debian、Ubuntu、Fedora、Arch、NetBSD 和 OpenBSD。查看您系统的软件包管理器以获取详细信息。

通用 Linux 二进制软件包

[编辑 | 编辑源代码]

http://www.openscad.org 处也提供了一个通用 Linux 二进制软件包,它可以解压缩并在大多数 Linux 系统中运行。它是自包含的,并包含所需的库。

每日构建

[编辑 | 编辑源代码]

参见 https://build.opensuse.org/package/show/home:t-paul/OpenSCAD

chrysn 的 Ubuntu 软件包

[编辑 | 编辑源代码]

对于 Ubuntu 系统,您也可以尝试 chrysn 在其 launchpad PPA 中提供的 Ubuntu 软件包,或者您只需将以下内容复制/粘贴到命令行中

sudo add-apt-repository ppa:chrysn/openscad
sudo apt-get update
sudo apt-get install openscad

他为 OpenSCAD 和 OpenCSG 提供的存储库位于 这里这里

自己构建 OpenSCAD

[编辑 | 编辑源代码]

如果您希望自己构建 OpenSCAD,请先使用您的软件包管理器在您的系统上安装 git。Git 有时以 'scmgit' 或 'git-core' 的名称打包。然后,使用 git 下载 OpenSCAD 源代码

cd ~/
git clone https://github.com/openscad/openscad.git
cd openscad


然后获取 MCAD 库,该库现在已包含在 OpenSCAD 二进制发行版中

git submodule init
git submodule update

安装依赖项

[编辑 | 编辑源代码]

OpenSCAD 使用大量第三方库和工具。这些被称为依赖项。通常可以在 openscad 主目录中的 README.md 中找到最新依赖项列表,位于:https://github.com/openscad/openscad/ 简要列表如下

Eigen、GCC 或 Clang、Bison、Flex、CGAL、Qt、GMP、MPFR、boost、cmake、OpenCSG、GLEW、QScintilla、glib2、harfbuzz、freetype2、pkg-config、fontconfig

预打包依赖项

[编辑 | 编辑源代码]

大多数系统都设置为使用 '软件包管理器' 安装预建的依赖项,例如 ubuntu 上的 apt 或 Arch Linux 上的 pacman。OpenSCAD 附带一个 '帮助脚本',它尝试自动为您运行您的软件包管理器,如果存在,则下载和安装这些预建的软件包。请注意,您必须以 root 用户身份运行和/或使用 sudo 才能尝试此操作。请注意,这些脚本很可能在 Sun、Solaris、AIX、IRIX 等系统上失败(跳至以下 '构建依赖项' 部分)。

./scripts/uni-get-dependencies.sh

验证依赖项

[编辑 | 编辑源代码]

尝试安装依赖项后,您应该仔细检查它们。退出任何 shell,并可能重新启动。

现在验证版本号是否与 openscad/README.md 文件中列出的版本号一致。还要验证是否意外遗漏了任何软件包。例如,打开一个 shell 并运行 'flex --version' 或 'gcc --version'。这些是确保您的环境正常运行的良好健全性检查。

OpenSCAD 附带另一个帮助脚本,它尝试在许多 Linux 和 BSD 系统上自动化此过程(同样,它在 Sun/Solaris/Irix/AIX/等系统上不起作用)。

./scripts/check-dependencies.sh

如果您无法验证您的依赖项是否已正确安装并具有足够的版本,那么您可能需要 '手动' 安装一些依赖项(请参阅以下有关构建您自己的依赖项的部分)。

如果您的系统具有所有正确的依赖项版本,则继续执行 '构建 OpenSCAD' 部分。

自己构建依赖项

[编辑 | 编辑源代码]

在缺少更新的依赖项库或工具的系统上,您必须手动下载每个依赖项并构建和安装它。您可以通过单独下载每个软件包并按照安装说明进行操作来实现。但是,OpenSCAD 附带了一些脚本,这些脚本尝试在 Linux 和 BSD 系统上自动化此过程,方法是将所有内容安装到 $HOME/openscad_deps 下创建的文件夹中。此脚本不会构建典型的开发依赖项,例如 X11、Qt4、gcc、bash 等。但它会尝试 OpenCSG、CGAL、boost 等。

要运行自动化脚本,请先设置环境变量(如果您不使用 bash,请用单个 '.' 替换 'source')

source scripts/setenv-unibuild.sh

然后,运行第二个脚本进行下载和构建。

./scripts/uni-build-dependencies.sh

(如果您只需要 CGAL 或 OpenCSG,您只需运行 ' ./scripts/uni-build-dependencies.sh cgal' 或 opencsg,它仅构建单个库。)

完整的下载和构建过程可能需要几个小时,具体取决于您的网络连接速度和系统速度。建议至少有 2 GB 的可用磁盘空间来进行完整的依赖项构建。每次登录到新 shell 并希望重新编译 OpenSCAD 时,您都需要重新运行“source scripts/setenv-unibuild.sh”脚本。

完成后,返回上面关于“验证依赖项”的部分,查看它们是否已正确安装。

构建 OpenSCAD 二进制文件

[编辑 | 编辑源代码]

安装完依赖项后,就可以构建 OpenSCAD 了。

qmake       # or qmake-qt4, depending on your distribution
make


您也可以将 OpenSCAD 安装到 /usr/local/ 中。‘openscad’ 二进制文件位于 /usr/local/bin 下,库和示例位于类似 /usr/local/share/openscad 的目录下,可能取决于您的系统。请注意,如果您之前安装过 OpenSCAD 的二进制 Linux 包,您应该注意删除 /usr/local/lib/openscad 和 /usr/local/share/openscad,因为它们与标准 qmake 构建的“install”目标使用的路径不同。

sudo make install


注意:在基于 Debian 的系统上,创建包并使用以下命令安装 OpenSCAD
sudo checkinstall -D make install


如果您不想安装,也可以直接运行“./openscad”,前提是您仍在 ~/openscad 目录中。

实验性

[编辑 | 编辑源代码]
OpenSCAD 2017-01-06 实验性构建,
所有实验性功能都已启用

要启用实验性功能,请使用CONFIG+=experimental 重新构建项目。

qmake CONFIG+=experimental
make -B

-B 只需执行一次(当您更改配置时)。

即使明确构建为实验性构建,实验性功能默认情况下也是禁用的。

构建成功后,您会在首选项中找到一个“功能”选项卡,您可以在其中启用各个实验性功能。


或者,您可以添加

CONFIG+=experimental

作为openscad.pro的第一行。

编译测试套件

[编辑 | 编辑源代码]

OpenSCAD 附带超过 740 个回归测试。要构建和运行它们,建议您首先按照上述步骤构建 OpenSCAD 的 GUI 版本,包括下载 MCAD。然后,从同一个登录中,运行以下命令

 cd tests
 mkdir build && cd build
 cmake .. 
 make
 ctest -C All

文件“openscad/doc/testing.txt”包含更多信息。完整的测试日志位于 tests/build/Testing/Temporary 下。可以在其下找到一个机器特定的子目录下的测试的漂亮打印的 index.html 网页视图,并使用浏览器打开。

故障排除

[编辑 | 编辑源代码]

如果您在构建时遇到任何错误,请在 https://github.com/openscad/openscad/issues/ 上提交问题报告。

关于不兼容库版本的错误

[编辑 | 编辑源代码]

这可能是由于旧库存在于 /usr/local/lib 中,例如 boost、CGAL、OpenCSG 等(通常来自之前 OpenSCAD 的实验)。建议您将其删除。例如,要删除 CGAL,请运行 rm -rf /usr/local/include/CGAL && rm -rf /usr/local/lib/*CGAL*。然后删除 $HOME/openscad_deps,删除 OpenSCAD 源代码树,并重新开始。从 2013 年开始,OpenSCAD 的构建过程不建议也不要求将任何内容安装到 /usr/local/lib 或 /usr/local/include 中。

请注意,CGAL 依赖于 Boost,而 OpenCSG 依赖于 GLEW - 如果在不寻常的位置存在一些遗留库,这种相互依赖关系可能会导致问题。

另一个混淆的来源可能来自在“不干净的 shell”中运行。确保您的 LD_LIBRARY_PATH 没有设置为指向任何不寻常位置的旧库。也不要将 Mingw 窗口交叉构建与您的 Linux 构建过程混合在一起 - 它们使用不同的环境变量,可能会发生冲突。

OpenCSG 没有自动构建

[编辑 | 编辑源代码]

如果由于某种原因,上面推荐的构建过程无法与 OpenCSG 一起使用,请在 OpenSCAD github 上提交问题。同时,您可以尝试自己构建它。

  wget http://www.opencsg.org/OpenCSG-1.3.2.tar.gz
  sudo apt-get purge libopencsg-dev libopencsg1 # or your system's equivalent
  tar -xvf OpenCSG-1.3.2.tar.gz
  cd OpenCSG-1.3.2
  # edit the Makefile and remove 'example'
  make
  sudo cp -d lib/lib* $HOME/openscad_deps/lib/
  sudo cp include/opencsg.h $HOME/openscad_deps/include/
注意:在基于 Debian 的系统(例如 Ubuntu)上,您可以将“install”目标添加到 OpenCSG Makefile,然后使用 checkinstall 创建一个干净的 .deb 包用于安装/删除/升级。将此目标添加到 Makefile
 install:
 	# !! THESE LINES PREFIXED WITH ONE TAB, NOT SPACES !!
 	cp -d lib/lib* /usr/local/lib/
 	cp include/opencsg.h /usr/local/include/
 	ldconfig

然后

 sudo checkinstall -D make install

…以创建和安装一个干净的包。

CGAL 没有自动构建

[编辑 | 编辑源代码]

如果发生这种情况,您可以尝试 自己编译 CGAL。建议您安装到 $HOME/openscad_deps,并在其他方面按照上述构建过程进行。

编译失败,GCC 或 GAS 出现内部编译器错误

[编辑 | 编辑源代码]

如果您耗尽了虚拟内存,则可能会发生这种情况,这意味着所有物理 RAM 以及来自磁盘的虚拟交换空间都已耗尽。请参阅下面关于“速度极慢”的原因。如果您是非 root 用户,您可以尝试一些方法。首先,使用“clang”编译器,因为它使用的 RAM 比 gcc 少得多。第二件事是编辑 Makefile 并从编译器标志部分删除“-g”和“-pipe”标志。

另一方面,如果您是 root 用户,则可以扩展交换空间。在 Linux 上,这是一种非常标准的过程,并且很容易在网络搜索中找到。基本上,您需要执行以下步骤(在确认没有名为 /swapfile 的文件后)

   sudo dd if=/dev/zero of=/swapfile bs=1M count=2000  # create a roughly 2 gig swapfile 
   sudo chmod 0600 /swapfile # set proper permissions for security
   sudo mkswap /swapfile  # format as a swapfile 
   sudo swapon /swapfile  # turn on swap

有关在 /etc/fstab 中永久设置交换空间的说明,可以通过网络搜索轻松找到。如果您是在 SSD(固态硬盘)机器上构建的,交换文件的速度可以使构建时间变得合理。

编译速度极慢,并且/或者会占用磁盘

[编辑 | 编辑源代码]

建议至少有 1.5 GB 的 RAM 来编译 OpenSCAD。如果您没有,可以尝试一些解决方法。第一种是使用 Clang 编译器的实验性支持(如下所述),因为 Clang 比 GCC 使用的 RAM 少得多。另一种解决方法是编辑 qmake 生成的 Makefile,搜索并替换优化标志(-O2)为 -O1 或空白,并从编译器行中删除任何“-g”调试标志,以及“-pipe”。

如果您有足够的 RAM,只是想加快构建速度,可以尝试使用以下命令进行并行多核构建

  make -jx

其中“x”是您要使用的核心数量。请记住,您需要 x 倍的 RAM 来避免可能的磁盘抖动。

构建速度慢的原因是 OpenSCAD 使用了像 CGAL、Boost 和 Eigen 这样的模板库,这些库在编译时会使用大量的 RAM - 特别是 CGAL。在某些系统上,GCC 在编译某些 CGAL 模块时可能会占用 1.5 GB 的 RAM。在 StackOverflow.com 上有更多信息

BSD 问题

[编辑 | 编辑源代码]

上面的构建说明旨在在 FreeBSD 和 NetBSD 上保持不变。但是,BSD 通常需要设置特殊的环境变量来构建任何 QT 项目 - 您可以通过运行以下命令自动设置它们

   source ./scripts/setenv-unibuild.sh

NetBSD 5.x 需要使用 已修补的 CGAL 版本。建议升级到 NetBSD 6,因为它有所有 pkgin 可用的依赖项。NetBSD 还要求在创建系统时安装 X Sets (或稍后添加)。

在 OpenBSD 上,它可能会在运行时耗尽 RAM 后无法构建。OpenSCAD 至少需要 1 GB 的内存才能使用 GCC 构建。您可能需要以“staff”级别用户身份访问或更改所需的系统参数。'dependency build' 序列也尚未移植到 OpenBSD,因此您必须依赖标准的 OpenBSD 系统包工具(换句话说,您必须具有 root 权限)。

Sun / Solaris / IllumOS / AIX / IRIX / Minix / 等

[编辑 | 编辑源代码]

OpenSCAD 依赖项构建主要集中在 Linux 和 BSD 系统(如 Debian 或 FreeBSD)上。'helper scripts' 可能会在其他类型的 Un*x 上失败。此外,OpenSCAD 构建系统文件(GUI 的 qmake .pro 文件,测试套件的 cmake CMakeFiles.txt)尚未在非 Linux 非 BSD 系统上经过充分测试。可能需要大量工作才能在这些系统上获得有效的构建。

测试套件问题

[编辑 | 编辑源代码]

无头服务器

测试套件尝试自动检测您是否已设置 X11 DISPLAY 环境变量。如果没有,它会尝试自动启动 Xvfb 或 Xvnc(虚拟 X 帧缓冲区)(如果可用)。

如果您想手动运行这些服务器,可以尝试以下操作

$ Xvfb :5 -screen 0 800x600x24 &
$ DISPLAY=:5 ctest

或者

$ xvfb-run --server-args='-screen 0 800x600x24' ctest

在某些情况下,Xvfb/Xvnc 无法正常工作。某些旧版本的 Xvfb 可能会失败并在没有任何警告的情况下崩溃。有时,Xvfb/Xvnc 在没有 GLX(OpenGL)支持的情况下构建,OpenSCAD 将无法生成任何图像。

基于图像的测试需要很长时间,它们会失败,并且日志会显示 'return -11'

Imagemagick 可能会在将预期图像与测试运行生成的(实际)图像进行比较时崩溃。您可以尝试通过擦除 CMakeCache 并使用 -DCOMPARATOR=ncc 重新运行 cmake 来使用备用 ImageMagick 比较方法。这将启用归一化交叉比较方法,该方法更稳定,但可能不太准确,可能会给出假阳性或假阴性。

测试图像失败,日志中显示 ImageMagick 的 “morphology not found”

您的 imagemagick 版本过旧。升级 imagemagick 或将 -DCOMPARATOR=old 传递给 cmake,否则比较可靠性会降低。

我移动了我构建的依赖项,现在 openscad 无法运行

[编辑 | 编辑源代码]

不建议移动它们,因为构建正在使用硬编码到 openscad 二进制文件中的 RPATH。您可以尝试通过将 LD_LIBRARY_PATH 环境变量设置为将您的路径/lib 放在它搜索的路径列表的第一位来解决问题。如果所有方法都失败,您可以重新运行整个依赖项构建过程,但在运行设置环境变量的脚本之前,将 BASEDIR 环境变量导出到您想要的位置。

技巧和窍门

[编辑 | 编辑源代码]

减少依赖项构建的空间

[编辑 | 编辑源代码]

构建完依赖项后,您可以通过删除 $BASEDIR/src 目录来释放空间 - 其中 $BASEDIR 默认值为 $HOME/openscad_deps。

偏好设置

[编辑 | 编辑源代码]

OpenSCAD 的配置文件保存在 ~/.config/OpenSCAD/OpenSCAD.conf 中。

设置环境以在 Ubuntu 11.04 中开始开发 OpenSCAD

[编辑 | 编辑源代码]

以下段落描述了一种在 Ubuntu 11.04 中轻松设置 OpenSCAD 开发环境的方法。执行以下步骤后,可以使用 QT Creator 以图形方式开始开发/调试 OpenSCAD。

  • 添加所需的 PPA 存储库
# sudo add-apt-repository ppa:chrysn/openscad
  • 更新并安装所需的软件包
# sudo apt-get update
# sudo apt-get install git build-essential qtcreator libglew1.5-dev libopencsg-dev libcgal-dev libeigen2-dev bison flex
  • 获取 OpenSCAD 源代码
# mkdir ~/src
# cd ~/src
# git clone https://github.com/openscad/openscad.git
  • 使用命令行构建 OpenSCAD
# cd ~/src/openscad
# qmake
# make
  • 使用 QT Creator 构建 OpenSCAD

只需在 QT Creator 中打开项目文件 openscad.pro(CTRL+O),然后点击全部构建(CTRL+SHIFT+B)和运行按钮(CTRL+R)。

Clang 编译器

[编辑 | 编辑源代码]

在 linux 下使用 Clang 编译器构建存在实验性支持。Clang 速度更快,使用更少的内存,并且错误消息与 GCC 不同。要使用它,首先您需要 CGAL 4.0.2 或更高版本,因为早期版本存在一个 bug,导致 clang 无法使用。然后,在构建 OpenSCAD 之前运行此脚本。

 source scripts/setenv-unibuild.sh clang

Clang 支持取决于您的系统 QT 安装是否具有 clang 支持的 qmake.conf 文件。例如,在 Ubuntu 上,它位于 /usr/share/qt4/mkspecs/unsupported/linux-clang/qmake.conf。BSD clang 构建可能需要大量调整,并且尚未经过测试,尽管最终计划朝这个方向发展,因为 BSD(更不用说 OSX)正在转向将 clang 作为他们的主要编译器。

华夏公益教科书