CGAL:Win10 + VS2017 编译 CGAL 5.2

CGALComputational Geometry Algorithms Library(计算几何算法库)的缩写,C++的高效算法库。

笔者编译的是CGAL 5.2版本。

说明:3月18号官方发布了5.2.1版本,对5.2版本进行了bug修复,具体编译和使用方法大同小异,建议大家使用5.2.1版本。

一、重要版本节点

CGAL 4.9:编译示例时,可以只使用头文件,不需要编译和连接库。但是为了生成一些配置文件,仍然需要CMake一下。

CGAL 4.12:header-only library 不需要CMake就可以使用CGAL,引用头文件即可。(CGAL的模板有点令人头大)同时,添加了新的工具包:Classification,可用于点云语义分割。

CGAL 5.0:仅引用头文件使用CGAL是默认方式。可在CMake配置中修改使用方式。因此,只需要下载CGAL-5.2-library.zipSTL、对应的BoostGMPMPFR,以及算法所需的库,就可以使用CGAL了。算法的demo在CGAL-5.2-library.zip中。

 

二、下载

2.1 下载地址

https://github.com/CGAL/cgal/releases  下载红色框的两个压缩包。

①CGAL-5.2.zip包括三个绿色框的文件:说明文档,demo和头文件库(如果不需要说明文档和demo,可以下载CGAL-5.2-library.zip);

②GMP and MPFR libraries, for Windows 64bits.zip是两个必需依赖库。

2.2 复制依赖库GMPMPFR

将GMP and MPFR libraries解压后的gmp文件夹复制到 CGAL-5.2\auxiliary 文件夹中。

2.3 第三方库

官网文档:https://doc.cgal.org/latest/Manual/index.html

2.3.1 必需的第三方库

(1)Standard Template Library (STL)

C++的基础库,安装VS和C++时就有

(2)Boost

下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/

CGAL 5.2对应boost_1_71_0-msvc-XX.Y-64.exe(XX.Y = 14.0 for VC 2015, XX.Y = 14.1 for 2017, XX.Y = 14.2 for VC 2019),可在VS的帮助-关于Microsoft Visual Studio中查看VC版本。

参照 https://doc.cgal.org/latest/Manual/windows.html 第2.1节

(3)GNU Multiple Precision Arithmetic (GMP) and GNU Multiple Precison Floating-Point Reliably (MPFR) Libraries

libCGAL、libCGAL_Core和libCGAL_Qt5需要。因为这两个库对C++的支持不完善,所以CGAL提供了预编译版本。参照2.2.

2.3.2 可选的第三方库

有了这三个必需库就可以编译出CGAL了。但是应对不同的需求,部分示例中有用到其它库。具体参见:https://doc.cgal.org/latest/Manual/thirdparty.htmlhttps://doc.cgal.org/latest/Manual/configurationvariables.html

注①:对于libCGAL_ImageIO来说,ZLIB是必需的(没有ZLIB,CGAL也可以编译成功。这么说有点别扭,文字狗头)。编译参见:https://blog.csdn.net/xinjiang666/article/details/114541563

注②:笔者所用Qt为5.12.5版本。

注③:使用v2021.1.1版本的TBB(oneTBB 2021.1.1——oneapi-tbb-2021.1.1-win.zip)会报“file STRINGS file "…/oneapi-tbb-2021.1.1-win/include/tbb/tbb_stddef.h" cannot be read.”的错误,因为根本没有tbb_stddef.h这个文件。所以可以采用v2020.3版本(Threading Building Blocks 2020 Update 3——tbb-2020.3-win.zip)

2.4 设置环境变量

设置环境变量,便于CMake找到相关路径,例如:

变量

BOOST_INCLUDEDIR

D:\OSGeo4W64\boost_1_71_0

BOOST_LIBRARYDIR

D:\OSGeo4W64\boost_1_71_0\lib64-msvc-14.1

CGAL_DIR

F:\CGAL-5.2

GMP_LIBRARY

F:\CGAL-5.2\auxiliary\gmp\lib

ZLIB_LIBRARY

D:\OSGeo4W64\zlib\lib

Path

%BOOST_INCLUDEDIR%

%BOOST_LIBRARYDIR%

%GMP_LIBRARY%

%ZLIB_LIBRARY%

------------------------------ 下面记录的是编译*.lib和*.dll的过程。------------------------------

三、CMake

设置源码路径为:F:/CGAL5.2/CGAL-5.2

设置构建路径为:F:/CGAL5.2/build

根据软件及环境按顺序单击。

所需库的路径如下:

勾选CGAL_HEADER_ONLY则编译为仅头文件库,不会有*.lib和*.dll。

修改CMAKE_INSTALL_PREFIX路径为:F:/CGAL5.2/install

设置ZLIB的相关路径

单击Configure,出现Configure done后,单击Generate,出现Generate done则表示完成。

四、VS编译

(1)VS2017打开 F:/CGAL5.2/build/CGAL.sln ,右击ALL_BUILD,生成。

 (2)右击INSTALL,生成。成功后,在 F:/CGAL5.2/install 中生成bin、include、lib、share四个文件夹。

五、测试

分享给有需要的人,代码质量勿喷。

参照:https://doc.cgal.org/latest/Manual/devman_create_and_use_a_cmakelist.html

5.1 CMakeLists.txt

cmake_minimum_required(VERSION 3.1...3.20)

project(Surface_mesh_Examples)

#CGAL_Qt5 is needed for the drawing.
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt5)
if(CGAL_Qt5_FOUND)
  #required to use basic_viewer
  add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
endif()

#create the executable of the application
create_single_source_cgal_program("draw_surface_mesh.cpp")

if(CGAL_Qt5_FOUND)
  #link it with the required CGAL libraries
  target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Qt5)
endif()
#end of the file

5.2 draw_surface_mesh.cpp

#include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/draw_surface_mesh.h>
#include <fstream>

typedef CGAL::Simple_cartesian<double>                       Kernel;
typedef Kernel::Point_3                                      Point;
typedef CGAL::Surface_mesh<Point>                            Mesh;

int main(int argc, char* argv[])
{
	Mesh sm1;
	std::ifstream in1("F:/testCGAL/sourceCode/pig.off");
	in1 >> sm1;
	CGAL::draw(sm1);
	return EXIT_SUCCESS;
}

5.3 CMake

将pig.off、CMakeLists.txt和draw_surface_mesh.cpp放在…/testCGAL/sourceCode文件夹中

源码路径:…/testCGAL/sourceCode

构建路径:…/testCGAL

Configure、Generate。

提示“Visual Leak Detector (VLD) is not found.”,不会影响程序运行。

5.4 VS2017编译

5.4.1 右击ALL_BUILD——生成。

错误:F:\CGAL5.2\install\include\CGAL/gmp.h(22): fatal error C1083: 无法打开包括文件: “gmp.h”: No such file or directory

解决:右击draw_surface_mesh——属性——C/C++——常规——附加包含目录——添加D:\CGAL_5.2.1\auxiliary\gmp\include

5.4.2 draw_surface_mesh设为启动项,右击缺少动态库

错误:提示缺少动态库

解决:将缺少的dll复制到exe目录下。

5.5 测试结果

修改:CGAL 5.2.1和VS2017编译好的库(Qt 5.12.5)

链接:https://pan.baidu.com/s/1RIlE5Pag34nvIK5xxw2GQw
提取码:i8fr 

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值