VS2010下安装CGAL的经验总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/charlee44/article/details/10558443

最近要用到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文件。

提示:

以后通过同样的方法,可以编译<CGAL>/demo中的范例。
5)一个简单的CGAL程序实例:

我们建一个简单的控制台项目,源代码:

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/convex_hull_2.h>
#include <vector>
typedefCGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;
typedef std::vector<Point_2> 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文件夹,都试试)。

如果你是64位系统,但和我一样安装的32位的,需要把vs的解决方案平台改为32位。


猜你喜欢

转载自blog.csdn.net/charlee44/article/details/10558443