zoukankan      html  css  js  c++  java
  • Windows 下安装 CGAL 并验证安装

    Windows 下安装 CGAL 并验证安装

    安装过程完全参考官方文档:https://doc.cgal.org/latest/Manual/windows.html

    本次安装环境:windows 10 1909 - 家庭中文版VS2017 Community

    安装方式:选用文档中的第一种,Installing CGAL with the Vcpkg Library Manager

    1. 安装 Vcpkg

    github 地址:https://github.com/microsoft/vcpkg

    正常(理想)的安装过程:

    C:dev> git clone https://github.com/microsoft/vcpkg
    C:dev> cd vcpkg
    C:devvcpkg> .ootstrap-vcpkg.bat
    

    遇到如下问题:https://github.com/microsoft/vcpkg/issues/3825

    Could not find Visual Studio. VS2015 or VS2017 (with C ...

    解决方法:换用 cmd 运行,不使用 Power Shell 运行,可能是 Power Shell 配置有些问题。

    2. 使用 Vcpkg 安装 CGAL

    2.1 正常(理想)的安装过程

    C:devvcpkg> ./vcpkg.exe install cgal
    

    2.2 遇到的问题及解决方法

    使用 vcpkg 会逐个安装依赖,可能需要下载很多应用,出现很多问题。除去网络的问题,一整套流程下来,download、build 仍然需要比较久的时间,需要耐心等待。

    问题1:下载依赖的应用太慢

    Downloading xxx... // 然后就一直不动了

    1588501410461

    每次下载不动的时候,可以手动下载,然后放到它需要的目录下(xx/vcpkg/downloads/)

    解决方法参考 - https://blog.csdn.net/qq_39690181/article/details/82910610

    问题2:错误提醒,vs 缺少英语 pack

    Warning: The following VS instances are excluded because the English language pack.

    使用 Visual Studio Installer -> 修改 -> 语言包 -> 英语,勾选后安装即可。

    解决方法参考 - https://blog.csdn.net/sdsabc2000/article/details/80049622

    问题3:boost license 文件下载不了

    Downloading https://raw.githubusercontent.com/boostorg/boost/boost-1.72.0/LICENSE_1_0.txt... Failed. Status: 6;"Could
    n't resolve host name

    1588502492112

    手动是可以打开下载该文件的,只是下载后不知道放在哪里,所以这个问题和问题1不太一样。

    相关的 github issue:https://github.com/microsoft/vcpkg/issues/11005

    解决方法:过一会儿再下载,可能是网络状况问题。我在换用校园网后下载成功了。这类问题在安装过程中一直出现,多执行几次命令,或者换一个网络环境再试一试。

    总结:大部分是网络问题,能手动下载的可以手动下载,否则可以换个网络环境,多执行几次脚本。

    最后安装成功的截图:(总共花费了差不多 30 min)

    1588510949256

    3. 编译例子验证 CGAL 安装

    3.1 添加 CGAL 到项目包含目录

    在 VS 中新建 Visual C++ 空项目,在解决方案资源管理器中,右键项目属性,打开属性页:

    1. 配置属性 -> VC++ 目录 -> 包含目录 -> 编辑,
    2. 添加上刚刚安装的 CGAL 目录:YOUR_INSTALL_DIRvcpkginstalledx86-windowsinclude,如下图

    1588505907647

    要注意,属性页的配置和平台选项(属性页最上方)需要和工具栏中的一致,图中均为:Debug - x64

    3.2 编写程序并运行

    这里的代码使用参考官方文档中的 Hellow Worldhttps://doc.cgal.org/latest/Manual/tutorial_hello_world.html

    项目中添加新建项,粘贴下列代码:

    #include <iostream>
    #include <CGAL/Simple_cartesian.h>
    
    typedef CGAL::Simple_cartesian<double> Kernel;
    typedef Kernel::Point_2 Point_2;
    typedef Kernel::Segment_2 Segment_2;
    
    int main()
    {
        Point_2 p(1,1), q(10,10);
        std::cout << "p = " << p << std::endl;
        std::cout << "q = " << q.x() << " " << q.y() << std::endl;
        std::cout << "sqdist(p,q) = " << CGAL::squared_distance(p,q) << std::endl;
    
        Segment_2 s(p,q);
        Point_2 m(5, 9);
    
        std::cout << "m = " << m << std::endl;
        std::cout << "sqdist(Segment_2(p,q), m) = "
                    << CGAL::squared_distance(s,m) << std::endl;
        std::cout << "p, q, and m ";
        switch (CGAL::orientation(p,q,m)){
        case CGAL::COLLINEAR: 
            std::cout << "are collinear
    ";
            break;
        case CGAL::LEFT_TURN:
            std::cout << "make a left turn
    ";
            break;
        case CGAL::RIGHT_TURN: 
            std::cout << "make a right turn
    ";
            break;
        }
        std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl;
        return 0;
    }
    

    3.3 查看运行结果

    编译运行,可以得到如下输出:

    image-20200504131209715

    这时 CGAL 应该是安装成功了。

    4. 为 CGAL 添加可选的第三方依赖 - 安装 Eigen 库

    这里主要以安装 Eigen 为例。当使用 CGAL 运行例子时,大部分可以正常运行,而有些需要额外库的支持,如,在 Point Set Processing Package 中,运行法向估计例子时,产生以下错误:

    error C4996: 'CGAL::Diagonalize_traits<FT,3>::diagonalize_selfadjoint_covariance_matrix': CGAL::Diagonalize_traits is a deprecated class that can lead to precision issues, please use CGAL::Eigen_diagonalize_traits

    是说 CGAL::Diagonalize_traits 已经弃用,需要使用 CGAL::Eigen_diagonalize_traits 来代替。查阅资料,并且分析库文件得知,安装 Eigen 库后,可以解决这个问题。

    4.1 使用 Vcpkg库安装 Eigen

    .vcpkg.exe install eigen3
    

    image-20200512173829933

    使用 Vcpkg 可以很容易安装 Eigen,之后在使用 VS2017 编译时,由于 Eigen 已经存在,编译时会使用 CGAL::Eigen_diagonalize_traits,上述问题解决。

    然而会出现新的问题:

    main.obj : error LNK2019: 无法解析的外部符号 __gmpq_clear,该符号在函数 "public: __cdecl CGAL::Gmpq_rep::~Gmpq_rep(void)" (??1Gmpq_rep@CGAL@@QEAA@XZ) 中被引用

    main.obj : error LNK2019: 无法解析的外部符号 __gmpq_equal,该符号在函数 "public: bool __cdecl CGAL::Gmpq::operator==(class CGAL::Gmpq const &)const " (??8Gmpq@CGAL@@QEBA_NAEBV01@@Z) 中被引用
    main.obj : error LNK2019: 无法解析的外部符号 __gmpq_init,该符号在函数 "public: __cdecl CGAL::Gmpq_rep::Gmpq_rep(void)" (??0Gmpq_rep@CGAL@@QEAA@XZ) 中被引用

    main.obj : error LNK2019: 无法解析的外部符号 __gmpq_set_d,该符号在函数 "public: __cdecl CGAL::Gmpq::Gmpq(double)" (??0Gmpq@CGAL@@QEAA@N@Z) 中被引用

    C:Users15651source eposCGAL-testx64DebugCGAL-test.exe : fatal error LNK1120: 4 个无法解析的外部命令

    通常无法解析的外部符号是由于 lib 缺失引起的,错误原因可以看出是 gmplib 缺失,可以从官方网站下载。

    无法解析的外部符号参考:

    4.2 下载缺失的 gmplib

    image-20200512172958495

    找到缺失的 LIB,GMP,下载下列两个预编译的库文件(官方下载链接):

    解压到同一目录下:

    image-20200512181151902

    gmplib 缺失参考:

    4.3 修改项目属性

    下载完成后,需要将上述库添加到项目中。

    项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项,添加上刚刚解压得到的两个 lib 文件;然后将两个 dll 放置在系统目录下或者编译出的 exe 同级目录下。再次尝试编译运行,应该可以成功。

    如果有以下问题:

    1. 编译错误:“无法解析的外部符号”;说明项目中 lib 没有添加成功,检查下路径是否正确。

    2. 运行错误:“由于找不到xxx,无法继续执行代码”(下图);说明 dll 位置放错了,把它放到生成的 exe 的同级目录下就可以了。

    image-20200512192713705

    如果在运行某软件或编译程序时提示缺少、找不到libgmp-10.dll等类似提示,libgmp-10.dll 拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。

    References

  • 相关阅读:
    2020牛客暑期多校训练营(第三场)
    2020牛客暑期多校训练营(第二场)
    C# 获取枚举类型中所有描述信息 Xinner
    XPath Xinner
    02kubeadm安装
    thinkphp6:访问redis6(thinkphp 6.0.9/php 8.0.14)
    npm8.3.0 安装@vue/cli 4.5.15
    linux(ubuntu 21.10): php8.0.14:安装phpredis以访问redis(phpredis5.3.5)
    linux(ubuntu21.10):apt方式安装redis6.0.15
    阿里云何万青:南坡VS北坡,阿里云高性能计算行业实践
  • 原文地址:https://www.cnblogs.com/crayonsea/p/12823828.html
Copyright © 2011-2022 走看看