VS2010下安装CGAL的经验总结


最近要用到CGAL生成三角格网,没想到在VC++下应用库的安装这么麻烦。在网上查了N多资料,安装了N次,不得不说很多资料都写的很不靠谱,最后找到这篇博客中找到了一篇英文原址:http://acg.cs.tau.ac.il/cgal-at-tau/installing-cgal-and-related-programs-on-windows,照着安装才终于成功。
1)安装Boost
首先我要说明:用原版的Boost安装绝对不容易。第一是用CMake生成CGAL项目时候有时不能识别Boost system和Boost thread,第二是编译CGAL生成lib文件时,总是会诸如出现“不能识别的外部符号...”这样的错误。出现这种错误,绝对是Boost安装出错,导致CGAL无法识别,因为CGAL是基于Boost写的。
与那篇英文文章一样,我是用boostpro安装成功的,boostpro需要在联网的情况下安装,能够直接提供编译好的dll和lib文件。进一步对比我还发现,boostpro能够提供boost开头和libboost开头的文件,而原版的Boost编译后只能生成libboost开头的文件。boostpro的下载地址是http://boostpro.com/download/boost_1_50_setup.exe.
这里1.50版本是32位,而1.51版本的64位和32位联网失败无法下载,令人无语。不过经过试验,如果是64位系统,一样可以安装成功。安装步骤如下:
1.同意所有的licenses。
2.选择Nearest SourceForge mirror.
3.选择"Visual C++ 10.0 (Visual Studio 2010)"以及以下variants:Multithreaded debug DLL;Multithreaded DLL;Multithreaded;Multithreaded debug。
4."Add to path"
5.Install
注意:
这里如果先前安装过,安装后环境变量可能不会变化,需要自己手动去添加或者修改:
Boost(没有则新建):G:\boost_1_50
BOOST_LIBRARYDIR(没有则新建):G:\boost_1_50\lib
path(最后面添加):G:\boost_1_50
2)Cmake
1.同意license。
2.选择"Add CMake to the system PATH for all users"。
3.Next,Next,Next。
4.Finish
CMake一般会在path中添加好环境变量,没有就自己添加:G:\Program Files(x86)\CMake 2.8\bin
3)CGAL
1.CGAL的安装需要在联网的环境下安装GMP and MPFR。
2.同意license。
3.选择默认的GMP和MPFR以及examples和demos就好。
4.选择自己系统位数:32位/64位。
5.选择“all users” 添加环境变量。
6.Install。
注意:
这里如果先前安装过,安装后环境变量可能不会变化,需要自己手动去添加或者修改:
CGAL_DIR:G:\CGAL-4.2
path:G:\CGAL-4.2\auxiliary\gmp\lib
4)通过CMake来编译CGAL,获得CGAL的lib
1.打开CMake,最好以管理员身份打开;
2."Where is the source code"表示你CGAL的安装路径,"Where to build thebinaries"表示你编译得到的CGAL项目路径,一般就把CGAL项目路径和安装路径放一起;
3.点击Configure
4.选择Visual Studio 10 2010然后Finish。注意,如果你是64为系统,如果用的是我这样的32位boostpro,就不要选择了vs2010X64了,否则编译的项目还是无法识别boost从而出错。boost、CGAL、编译器一定要对应,否则就一定会出现诸如“不能识别的外部符号...”的错误。
5.点击Generate
6.一个名称是CGAL的项目就在"Where to build thebinaries"的路径中创建了。
7.在Debug和Release下都编译运行一边CGAL项目,如果说出现“缺少XXX.lib”的错误,那么就在boost安装路径,CGAL安装路径中找到并且复制到项目,或者VC的lib文件夹,或者安装盘的system32文件夹(64位是system文件夹,都试试);再次说一下,如果说出现“不能识别的外部符号...”的错误,那么一定是boost没被CGAL识别,退回去一步步来,看哪里出错了。
8.这是路径中会新增加一个lib文件夹,里面放着编译出来的CGAL的lib文件。
9.运行到最后出现提示:“缺少AllBuild”之类的,应该就是成功了,lib文件夹会出现你编译出来的CGAL的lib文件。
提示:
以后通过同样的方法,可以编译/demo中的范例。
5)一个简单的CGAL程序实例:
我们建一个简单的控制台项目,源代码:

#include #include #include typedefCGAL::Exact_predicates_inexact_constructions_kernel K; typedef K::Point_2 Point_2; typedef std::vector Points; int main() { Points points, result; points.push_back(Point_2(0,0)); points.push_back(Point_2(10,0)); points.push_back(Point_2(10,10)); points.push_back(Point_2(6,5)); points.push_back(Point_2(4,1)); CGAL::convex_hull_2( points.begin(),points.end(), std::back_inserter(result) ); std::cout << result.size() <<" points on the convex hull" << std::endl; return 0; }



此时程序无法运行通过,选中工程,右键点击,选中"Properties"。
依次选中C/C++->General,在"Additional IncludeDirectories"中加入如下路径:
G:\boost\boost_1_50; G:\CGAL4.2\include; G:\CGAL4.2\auxiliary\gmp\include。
依次选中Linker->General,在"AdditionalDependencies"中加入如下路径:G:\boost\lib; G:\CGAL4.2\lib; G:\CGAL4.2\auxiliary\gmp\lib。
除此之外,你还需要忽略gmp和mpfr的auto-link,进入Linker-> Input,在"AdditionalDependencies"中加入“libgmp-10.lib”和“libmpfr-4.lib”。在"Ignore SpecificLibrary"中加入“gmp-vc100-mt-gd.lib”和“mpfr-vc100-mt-gd.lib”(注意,如果你是用的release模式,就加入“gmp-vc100-mt.lib”和“mpfr-vc100-mt.lib”)。
注意:
最后可能仍然运行不成功,说不能找到XXX.lib/dll之类的,那么就在boost和cgal的安装路径中找到,复制到项目,或者VC的lib文件夹,或者安装盘的system32文件夹(64位是system文件夹,都试试)。
【VS2010下安装CGAL的经验总结】如果你是64位系统,但和我一样安装的32位的,需要把vs的解决方案平台改为32位。

    推荐阅读