CGAL的编译与配置

CGAL的编译与配置

网上已经有一些配置的步骤,但是在具体配置过程中,发现有很多问题,折腾了两天后终于配置成功,在此做更详细的记录。

准备

CGAL:CGAL4.7和CGAL4.9的库,分别编译成功了;
BOOST:boost1.59的版本
Cmake:2.8.11.2 win32 x86
均可在官网下载

编译boost

CGAL基于boost库,因此先编译boost库。
1.下载完boost库,解压安装包,会得到一个包含bootstrap.bat的文件夹,运行cmd,把cmd中的路径改变为bootstrap.bat所在的目录(cd 路径名)
2.运行bootstrap.bat,运行完后,会有一个b2.exe的应用程序,如图:
CGAL的编译与配置_第1张图片
3.运行b2.exe(如果不需要完全编译的话,可以采用https://blog.csdn.net/u013094443/article/details/51106015中所说的,只编译两个库)
CGAL的编译与配置_第2张图片
按照图中进行编译 会在…boost_1_59_0\stage中生成这几个库文件(cmake会用到):
CGAL的编译与配置_第3张图片

安装CGAL(以CGAL4.9为例)

下载的CGAL压缩包直接解压,如果是下载的exe,一步一步安装即可,最后得到一个包含CMakeLists.txt的文件夹。
CGAL的编译与配置_第4张图片

安装使用Cmake

安装cmake,运行cmake-gui;
CGAL的编译与配置_第5张图片
where is the source code 就是CGAL中CMakeLists.txt所在的目录
where to build the binaries 就是生成的sln所在目录(建议自己新建一个目录)
因为要用到boost库,要将用户变量设置一下
变量名:BOOST_INCLUDEDIR
路径:包含bootstrap.bat的文件夹

变量名:BOOST_LIBRARYDIR
路径:…\stage\lib
(有的说是boost_1_59_0\lib32-msvc-10.0 这个路径,但是我安装编译完boost没有这个文件夹生成…)

然后按Configure;
这一步产生error,困扰了一天… 说是找不到
boost_system 和
boost_thread
首先保证了路径已经加进去了(我电脑生效不需要重启,改变了路径,如果是软件用到的路径,只需要重启软件即可,如果说系统用到的,可能要重启电脑-待研究)
这个库在运行b2.exe的时候,生成的名称是这样的:
libboost_system-vc100-mt-1_63.lib
libboost_thread-vc100-mt-1_63.lib
这个很坑,路径包含了还是找不到,就尝试着把这两个库的名字改成上面的
boost_system.lib 和
boost_thread.lib
竟然成功-done了。
然后勾选:
在这里插入图片描述
引用https://blog.csdn.net/u013094443/article/details/51106015;我也不知道为什么。
点Generate;
最后就在输出的目录生成一个CGAL.sln文件;

打开文件,分别编译,这时候又提示 link的错误。。
打不开boost_thread-vc100-mt-1_59.lib,
于是,又把生成的libboost_thread-vc100-mt-1_59.lib改成boost_thread-vc100-mt-1_59.lib这个这个名字(吐槽为什么编译出来的lib和cmake用的、vs用的都不一致!)
然后编译成功,生成需要的CGAL相关的lib文件。

另外,我用另一台电脑编译出来的boost是vc110版本的,还有待研究…
======更新—另一台电脑的编译器默认是2012 如果要编译成vc100,只需要在命令行中加上–toolset=msvc-10.0 即可

		 2019-6-17更新

四天前编译成功的CGAL库,其实就是按部就班教程编译,简单的做个记录,但是发现无法在我的程序上使用,会报错 link2001 无法解析的外部符号,经过四天“艰苦卓绝”的探索终于解决。
首先确定是库版本的问题,同时也解决了上面的疑问,为什么编译出来的库名称不一致!
==在这里先给出结论:不要妄想着通过修改库的名称来编译或者使用,会造成版本混乱,会出现乱七八糟link的错误,那会更麻烦,毕竟库的名称都是有意义的!!!!

编译这个库之前,完全不懂cmake,也没怎么编译过库。因此一步一步来,要知其所以然。

首先了解一下boost库的命名规则:
http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html
知道了命名规则后,就可以选择编译哪些版本的库。
这里总结了几点:有lib开头的为静态库libboost,没有lib的boost库为导入库或动态库。
静态库有两种连接方式–静态链接(有s) 动态链接(没有s)

知道命名之后,我电脑上需要的CGAL库为:libCGAL-vc100-mt-s-4.9.lib
从命名上知道我是需要用静态库,并且是静态链接(release-c+±代码生成-运行库-多线程mt)

第一个问题来了:我一开始编译出来的CGAL是没有lib的动态库,后来改名字(现在看来很蠢),出现link错误,于是就想在cmake上找有没有动态库静态库的选项,果然找到了:
在这里插入图片描述
BUILD_SHARED_LIBS这个是默认勾上的,要勾去掉,就从shared变成static,就可以编译出来有lib在前面的CGAL库—libCGAL。

第二个问题:我编译出来的库,是没有s的,即libCGAL-vc100-mt-gd-4.9.lib
这个真的很头疼,因为cmake中都是自动链接boost不带s版本的库,不懂cmake的我,想在CGAL目录下的CMakeLists.txt中增加代码,让cmake检测我想导入的boost库。。结果也是没办法。
后来一直搜一直搜,搜到国外一个CGAL的讨论网站,也有人有类似的问题,竟然发现cmake中的advance中有导入boost库的选项!!
CGAL的编译与配置_第6张图片
于是我就把所有的库都改成带有s版本的名字。
在这里插入图片描述
并且在这里打上勾,因为我需要用static的cgal库,点generate—成功!
打开cgal的sln件,发现生成库的名称依然没有s…
不过我把c++代码生成中的运行库从md变成mt,完全跟我需要用到cgal库的环境一致,这样改库的名称应该没有问题了把,于是在输出的库名称中加了s。
改成mt后,生成,竟然成功了!!!生成了libCGAL-vc100-mt-s-4.9.lib。
然后放到程序库目录下—没有链接错误!!生成成功。

你可能感兴趣的:(CGAL的编译与配置)