在Win8,VS2013中配置CGAL库

xiaoxiao2021-02-28  82

一.总体流程

1.安装VS2013

2.安装CMake

3.安装Boost

4.安装Qt

5.安装libQGLViewer

6.安装、编译CGAL

二.安装环境

Win8 64位系统Visual Studio 2013CMake 3.7.2boost_1_59_0-msvc-12.0-64Qt5.5.1-opensource-windows-x86-msvc2013_64libQGLViewer-2.7.1(未编译好)CGAL-4.10.2-Setup

三.安装步骤解析

1.安装VS2013

博主之前已经下载了VS2013,所以此处不赘述VS2013的安装,有兴趣的读者可以搜索相关文章。

(博文“在Win10,VS2013 中配置CGAL库”中指出配置CGAL的环境如果是VS2013则必须含update5,否则使用boost库时,会出现C1001:编译器中发生内部错误的情况,关于此现象博主未出现所以也未进行验证。该文中还给出了带update5的VS2013镜像文件,有兴趣的读者可以参见。)

2.安装CMake

下载地址https://cmake.org/download/ 本文的Cmake版本是cmake-3.7.2-win32-x86。 CMake是一个工程管理工具,功能类似于一个转换器,可以将一些文件转化生成.sln等工程,以在VS等IDE中打开相关工程文件。 下载安装包后,安装程序。

傻瓜式安装,安装完毕后确认一下系统变量中有没有红色框中的目录,若没有需要手动添加进去即可。

3.安装Boost

下载Boost是一个巨大的坑,原因在于网上的许多中文教程把简单的事情搞复杂了。

Boost库有两种下载方式,一种是下载源码进行自行编译并配置的方式,另一种是直接下载二进制文件并进行编译的方式。由于后一种方式较为简单且同样适用,先来说一下第二种方式。(本博文也是直接用的.exe文件安装得到的二进制文件配置成功的)

1)直接下载二进制文件后配置方式(如下载.exe文件进行安装)

<1>下载安装

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

本文下载的BOOST版本是 boost_1_59_0-msvc-12.0-64.exe12 表示vs2013,10 表示vs2010, 11表示vs2012,32表示(x86)版本),直接运行.exe 文件安装boost库即可。 

<2>配置

BOOST安装完成后,需要添加环境变量(计算机属性-高级-环境变量-系统变量中新建)以及在path变量中添加一个路径: 

BOOST_LIBRARYDIR=C:\dev\boost_1_59_0\lib64-msvc-12.0   BOOST_INCLUDEDIR=C:\dev\boost_1_59_0  

path中添加路径:C:\dev\boost_1_59_0\lib64-msvc-12.0 

(新增的两个环境变量也可以在CMake的时候作为添加的Cache输入,但还是作为环境变量添入比较方便于全面)

2)下载源码进行编译后配置方式

第二种是下载压缩包版的boost 库,可用VS或cmd编译,可以达到同样效果,但msvc 相较比较简单(其可参考http://www.2cto.com/kf/201701/584065.html)。

<1>下载编译

过程:

下载Boost 1.59.0.zip 解压Boost到C:\dev\boost_1_59_0下面以管理员身份打开CMD,并切换到C:\dev\boost_1_59_0,进行如下操作:执行.\bootstrap.bat生成bjam.exe,b2.exe。(b2.exe是bjam.exe的升级版本)使用b2.exe进行编译 .\b2.exe -j5 toolset=msvc-12.0 link=static runtime-link=static threading=multi --stagedir="D:\Mylaf\Config\boost_1_62_0" --build-type=complete address-model=32 --without-python --without-mpi --without-metaparse --without-graph --without-graph_parallel --without-program_options --without-wave --witout-type_erasure --without-coroutine --without-coroutine2

编译结果:

...updated 1003 targets... The Boost C++ Libraries were successfully built! The following directory should be added to compiler include paths: D:\Mylaf\Rebuild\VS2013\boost_1_62_0 The following directory should be added to linker library paths: D:\Mylaf\Rebuild\VS2013\boost_1_62_0\D:\Mylaf\Config\boost_1_62_0\lib D:\Mylaf\Rebuild\VS2013\boost_1_62_0>

(注意:如果是下载源码自行编译,那么选用的编译器版本,位数等信息一定要作为显式参数进行设置然后编译,不然可能出现编出来的库和CGAL需要的依赖库版本对不上的情况。)

<此处有几个小问题>

执行.\bootstrap.bat时有如下图的报错

原因分析:

VS2013的编译器路径给错了(boost_64_vs12要用VS2013对应的编译器编译,所以不能给错路径)。

排错方法:

win+R -> cmd -> set -> 查看

“”

中的VS12OCOMNTOOLS是否正确,之前是默认的顺延VS2010的路径,是“D:\vs2013\Common7\Tools”是错误的(VS2010确实存在对应的“D:\vs2010\Common7\Tools”路径下,但VS2013不是,改过来就行)。

<2>配置

BOOST安装完成后,需要添加环境变量(计算机属性-高级-环境变量-系统变量中新建)以及在path变量中添加一个路径: 

BOOST_LIBRARYDIR=C:\dev\boost_1_59_0\lib64-msvc-12.0   BOOST_INCLUDEDIR=C:\dev\boost_1_59_0  

path中添加路径:C:\dev\boost_1_59_0\lib64-msvc-12.0 

(新增的两个环境变量也可以在CMake的时候作为添加的Cache输入,但还是作为环境变量添入比较方便于全面)

[此处安装Boost库的深刻教训]

 Boost的库的.exe二进制库与Boost的压缩源文件自编译库的区别弄清楚(自编译库的话把VS版本以及位数版本等信息以显式参数的形式标出)CMake的路径确实要重启才能更新(虽然Win7的echo %变量名%对应的路径实时更新)。 官网教程是宝典,中文混杂式的教程坑惨人。(比如用Boost的.exe二进制库进行自行无参数默认编译然后进行配置的情况,导致后面用CMake对CGAL库进行编译的时候关于Boost库“找不到system和thread”的错误一直解决不了——“缺钙型串儿性”的错误最坑人!所以参考资料的选取很重要啊。) 

4.安装Qt

博主下载的是:Qt5.5.1-opensource-windows-x86-msvc2013_64.exe 下载链接: http://download.qt.io/archive/qt/5.5/5.5.1/ 配置:下载好后对该可执行文件进行一键安装即可,并将 Qt5.5.1库的bin路径添加到系统环境变量的Path变量中。 例: [cpp]  view plain  copy C:\Qt\Qt5.5.1\5.5\msvc2013_64\bin   (博主由于暂时不用libQDLViewer功能,怕弄混多个版本Qt之间的配置问题,所以关于Qt的下载与配置仅仅到上述程度。关于完整的Qt+qt-vs-add in的下载与配置以及Qt加上QTDIR环境变量的配置可以参考博文 在Win10,VS2013 中配置CGAL库。)

5.安装libQGLViewer(已下载压缩包,但未编译成功,问题先记录如下)

注意:

如果仅仅是想用CGAL库的话,是不需要安装配置Qt5和libQGLViewer的;CGAL中的example 不需要安装配置Qt 5或者libQGLViewer,安装完VS,Cmake,BOOST即可。如果想要编译CGAL中的Demo的话,需要安装配置Qt 5;如果想要编译CGAL中的3D Demo的话,Qt5和libQGLViewer 都需要安装配置好。

[参考做法:在Win10,VS2013 中配置CGAL库]

下载地址:http://libqglviewer.com/ 本文libQGLViewer版本是libQGLViewer-2.7.1。(本文是在vs 中编译,也可在vs中的qt编译,参考请见http://www.cnblogs.com/woolongtea/p/3545134.html,本文曾尝试在qt 内编译,但未得到需要调用的动态库和静态库文件 QGLViewer2.dll 和 QGLViewer2.lib,值得再尝试。libQGLViewer官网中有分别在不同操作系统下的不同的编译方式的介绍。) 将程序解压放入文件中后,打开 x86 Visual Studio Command Prompt 编译(程序-vs2013-VS tools中) (64位则用x64)

打开X86/X64 窗口 输入cd d:\dev\libQGLViewer-2.6.3\QGLViewer(可直接拖相应文件夹),回车 输入 qmake.exe 回车 输入 nmake 回车

等待编译成功后,即在QGLViewer中生成相应的库。并添加path路径和环境变量 QGLVIEWERROOT

path:D:\dev\libQGLViewer-2.6.4\QGLViewer 

QGLVIEWERROOT =D:\dev\libQGLViewer-2.6.4

[本文遗留问题]

上图为libQGLViewer官网的三种libQGLViewer库的编译方式,加上下图CGAL库官网关于libQGLViewer配置方法(也是多数中文博文的配置方法)一共有四种方法。其中博主测试了第1、3、4方法,依然没有成功。

情况如下:

方式1:

Qt4.8.5和Qt5.5.1都试过。

Qt4.8.5编译过程中出现如下图所示的错误:需要至少Qt5以上版本。

利用Qt5.5.1的时候显示找不到#include <Gui/xxx>而报错,修改了.pro文件中的QT+=widget以及#include <xxx>(即Qt5库文件路径变动修正)后,又报错找不到QOpenGLWidget:

难道是因为没有Qt5.5.1之前没有下载或配置好OpenGL方面的库?

方式3:

用VS2010打开.pro文件后进行build all也出现许多报错,没细看。因为VS2013没有配置vs-qt-add in所以没有尝试过

方式4:

进行qmake和nmake指令后大部分为报错信息,与教程的区别仅仅在于没有进行下图红框中的添加QTDIR的环境变量信息。

注:

后续如果有必要编译配置好libQGViewer库的话,思路是首先按照方式4的方法(即CGAL官网的方法对Qt5进行QTDIR的配置然后进行测试,还不行的话从QOpenGLWidget层面开始排错。但是应该不会那么复杂,应该还是在于Qt5层面的环境配置不完善导致的。有时间再排错啦!)

教训:

先聚焦到主要矛盾上,不要在次要矛盾上大费周章,尤其是在时间紧急的时候,不能放任自己的“消耗自足惯性”。

6.安装、编译CGAL

1)安装CGAL

下载地址:https://github.com/CGAL/cgal/releases(若网址进不去,可能需要翻墙) 本文CGAL安装版本:CGAL-4.10.2 下载 CGAL-4.10.2-Setup.exe 并安装,傻瓜式安装,需要注意的只有两点:1,选择64-bits(本文都是基于64bit)2,勾选用于全部使用者和添加路径

安装完后,将 (CGAL-4.10.2安装目录)\auxiliary\gmp\lib 加入到PATH

2)编译CGAL

打开 CMake-GUI d:\dev\CGAL-4.10.2 for source and d:\dev\CGAL_build as binaries 点击Condigure,选择 VS 12 2013 后开始编译,then 点击Generate

用VS2013 打开D:\dev\CGAL_build 文件下的CGAL.sln,分别在Debug and Release下生成。 最后在path中加入路径 D:\dev\CGAL-4.9\build\bin

7.CGAL库的Example编译

CGAL中的example 不需要Qt 5或者libQGLViewer,安装完VS,Cmake,BOOST即可。

打开Cmake-Gui,,添加代码及设置生成文件,选定 VS 12 2013 后编译。

在相应的D:\dev\CGAL-4.10.2\build-examples\Modular_arithmetic文件中,用VS打开Modular_arithmetic_.sln 文件,重新生成Debug or Release folder。 在文件中找到可运行 .exe 文件。(一闪而过)

8.CGAL库的Demo编译

在Qt 5或者libQGLViewer 都安装好后,可编译CGAL中的Demo,过程如上,结果如下 。

(注意,只有3D的Demo需要libQGLViewer,所以在没安装好libQGLViewer的情况下有些非3D的Demo也是可以编译的,比如Triangulation_demo_2等)

注:

关于example和demo的编译,在Qt 5与libQGLViewer 都安装好后,也可批量进行编译。方法是在对CGAL库进行CMake操作时,进行Config之后,将下图的两个选项勾选上(这样可以得到CGAL的例子),然后点击Generate。

然后打开C:\dev\CGAL_build\examples下的任意例子,如Min_circle_2,应该就能跑起来了。(demo应该同理)(批量编译example和demo的模式没有亲测过,因为博主libQGLViewer没配置好,批量编译example和demo都报错,下图为批量进行example编译时的报错图。但是用啥编啥的单个编译模式已经亲测过了。)

9.CGAL库在VS2013空项目工程的配置

1)打开vs2013,新建控制台程序,选择空项目。 (空项目添加源文件+VS项目工程属性配置的效果=对应的源文件+仿照example/demo中的CMakeLists.txt的效果,这两种模式只是生成工程时的配置方式方式不同,一种是VS机制,一种是CMake,但最后都可生成VS IDE下配置好的工程,两种思路,互帮互助课切换,殊途同归。此处讲的是前者,上面内容中的example/demo属于后者。)

2)点击菜单栏中的视图->其他窗口->属性管理器->右键项目名->添加新项目属性表(项目属性表可以保存重复利用哈)。

(当然也可以通过“在项目名称上点击右键-》属性-》VC++目录”对某个项目进行单独配置) 

(关于VS2013中的全局属性和局部属性设置,可以参考博文:VS2013中全局属性与局部属性的设置)

  进去后,找到VC++目录 

选择包含目录,根据自己的安装目录添加:

VC++目录下的库目录:

VC++目录下的源目录:

链接器->输入->附加依赖项:

配置好后右键保存 。

(下面这条是其他博主遇到的情况,博主没遇到过,留着备用)

CGAL配置到这就差不多了,不过很多时候CGAL是和openGL配套使用的,建议也装下openGL我相信你会用到的,还有就是我在运行demo的时候最后出现过几个错误,好像是什么_CRT_SECURE_NO_WARNING…..什么的,这好像是版本兼容问题,这应该是我选的demo版本太旧的问题,要在链接器->命令行下加一些代码,这个问题百度下很常见。

然后把官网上这个直线和线段求交的例子拷进去看看:

#include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/intersections.h> typedef CGAL::Exact_predicates_exact_constructions_kernel K; typedef K::Point_2 Point_2; typedef K::Segment_2 Segment_2; typedef K::Line_2 Line_2; typedef K::Intersect_2 Intersect_2; int main() { Segment_2 seg(Point_2(0,0), Point_2(2,2)); Line_2 lin(1,-1,0); CGAL::cpp11::result_of<Intersect_2(Segment_2, Line_2)>::type result = intersection(seg, lin); if (result) { if (const Segment_2* s = boost::get<Segment_2>(&*result)) { std::cout << *s << std::endl; } else { const Point_2* p = boost::get<Point_2 >(&*result); std::cout << *p << std::endl; } } getchar(); return 0; }

注:

Debug模式下编译运行过程中会出现下图提示

“无法找到“xxx.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件。”

Debug模式下,运行时正常但有上述警告提示,但是一调试就出现对话框,显示出错信息。这个问题如果不解决,会出现一些小的问题影响程序的正确运行。从网上找了一些解答,终于把这个问题给解决了。其实问题在于,在空项目中不生成调试文件pdb,所以无法调试。

要让项目生成pdb文件,需要进行如下更改(解决方案):

首先打开菜单,项目/也可右键项目 -> 项目属性页 1.选择“配置属性” -> “链接器” -> “调试” -> “生成调试信息”改为“是” 2.选择“配置属性” -> “C/C++” -> “常规” -> “调试信息格式”改为“用于“编辑并继续”的程序数据库(/ZI) ”3.选择“配置属性” ->“C/C++” -> “优化” -> “优化”改为“禁用(/Od) ”

建议:“建立项目的时候不应建立空项目,而应当建立一个“win32控制台应用程序”。这样确实可以解决问题。只要你选择的是这个"win32控制台应用程序",则在附加选项里面选不选上“空项目”都可以。发现其他的项目都可以调试,就“空项目”不行(该句为转载,未亲测)。

当然,建立空项目然后在进行上述的操作更改依然可以解决问题(博主进行上述代码测试的时候就是用的空项目结合该方法调试成功的)。

本贴的经验总结:

1.永远不要低估任何一个必须完成的任务,盲目乐观是程序员需要克服的特质。否则你没有足够的时间和心理准备去随时迎接出现的bug和未知的挑战。

2.官方文档永远是最好的参考资料,而不盲目乐观,提前行动,肯花时间下功夫去啃也是必不可少的前提条件。一旦陷入“盲目乐观->没有充裕时间啃官方文档->匆匆走马观花错误百出的博文->各种出错而不得解”的循环会很被动。“裕从本真”是最好的状态。

3.首先解决“主要矛盾”,不要陷入“消耗自足”的惯性中。

参考资料(排名分先后):

http://blog.csdn.net/baidu_30157577/article/details/69261438?locationNum=13&fps=1

https://www.cgal.org/download/windows.html

http://blog.csdn.net/milkpku/article/details/50241361

http://blog.csdn.net/babywong/article/details/40983039

http://blog.csdn.net/sxf1061926959/article/details/52685032

http://blog.csdn.net/super_lee2013/article/details/49684715

http://blog.csdn.net/u013094443/article/details/51106015

https://www.cnblogs.com/ucas/p/5264609.html

https://jingyan.baidu.com/article/1709ad80b673f34634c4f0ac.html

转载请注明原文地址: https://www.6miu.com/read-2450037.html

最新回复(0)