在编译使用CGAL库的某些部分的测试程序时,我变得很奇怪(对我来说)错误。
首先,环境:
安装错误?
为了在我的计算机上安装CGAL,我遵循了本教程:http://www.cgal.org/windows_installation.html。我必须在此注意,这对我来说并不是开箱即用的。在CMake的CGAL配置阶段,找不到boost库(尽管我设置了相应的环境变量,如教程中所述)。在CMake中设置了不正确的变量之后,我就能够完成配置和生成阶段。之后,我能够在Visual Studio中编译Debug以及CGAL的Release配置。
为了测试CGAL lib是否已成功安装,我尝试编译并运行示例和演示。这些也没有立即起作用。问题是找不到CGAL和Boost标头(和二进制文件)。在 Project properties =>中设置正确的路径后配置属性=> C / C ++ =>其他包含目录和项目属性=>配置属性=>链接器=>其他库目录可以构建示例和演示。之后我成功运行了这些示例。
实际问题
现在,我正在编写一个简单的程序,以便能够进行一定的练习(http://acg.cs.tau.ac.il/courses/algorithmic-robotics/spring-2013/exercises/assignment-2练习2.1)。这里提供了两个文件:basic_typdef.h和cgal_bootcamp.cpp
* basic_typedef.h *
#pragma once
#include <CGAL/Cartesian.h>
#include <CGAL/Gmpq.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Boolean_set_operations_2/Gps_default_dcel.h>
#include <CGAL/Polygon_set_2.h>
#include <list>
/*******************************************************************************************
* This file contatins basic typedefs (from CGAL and more).
*******************************************************************************************/
typedef CGAL::Gmpq Number_type;
typedef CGAL::Cartesian<Number_type> Kernel;
typedef Kernel::Point_2 Point;
typedef CGAL::Polygon_2<Kernel> Polygon;
typedef CGAL::Polygon_with_holes_2<Kernel> Polygon_with_holes;
typedef CGAL::Polygon_set_2<Kernel> Polygon_set;
typedef std::list<Polygon_with_holes> Polygon_with_holes_container;
* cgal_bootcamp.cpp *
#include "basic_typedef.h"
int main(int argc, char* argv[])
{
return 0;
}
(为方便起见,我删除了文件cgal_bootcamp.cpp中的注释)
使用Visual Studio,我可以编译上面的两个文件。但是,当我尝试创建一个Point(在basic_typedef.h中定义)时,我遇到了(奇怪的)错误:
#include "basic_typedef.h"
int main(int argc, char* argv[])
{
/*
1. Point
http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Class_Point_2.html
*/
// Create Point with the coordinates (0.5, 0.6)
Point p;
return 0;
}
发生的错误:
Error 1 error LNK2019: unresolved external symbol __imp____gmpq_init referenced in function "public: __thiscall CGAL::Gmpq_rep::Gmpq_rep(void)" (??0Gmpq_rep@CGAL@@QAE@XZ) C:\Dropbox\Capita Selecta\Assignments\Assignment 2.1\warmup-exercise\cgal_bootcamp.obj warmup-exercise
Error 2 error LNK2019: unresolved external symbol __imp____gmpq_clear referenced in function "public: __thiscall CGAL::Gmpq_rep::~Gmpq_rep(void)" (??1Gmpq_rep@CGAL@@QAE@XZ) C:\Dropbox\Capita Selecta\Assignments\Assignment 2.1\warmup-exercise\cgal_bootcamp.obj warmup-exercise
Error 3 error LNK1120: 2 unresolved externals C:\Dropbox\Capita Selecta\Assignments\Assignment 2.1\warmup-exercise\Debug\warmup-exercise.exe 1 1 warmup-exercise
4 IntelliSense: #error directive: "Mixing a dll CGAL library with a static runtime is a really bad idea..." c:\dev\cgal-4.3\include\cgal\auto_link\auto_link.h 364 4
5 IntelliSense: #error directive: "some required macros where not defined (internal logic error)." c:\dev\cgal-4.3\include\cgal\auto_link\auto_link.h 397 4
我不知道这里出了什么问题(我必须注意到我仍然是C ++的菜鸟)。似乎GMP库有问题(至少链接到这个?)我在另一篇帖子中发现,对于某人没有构建libgmp文件(找不到该帖子了),但事实并非如此对我来说(我认为):在CGAL-4.3 / auxiliary / gmp / lib中我看到四个文件,libgmp-10.dll libgmp-10.lib libmpfr-4.dll和libmpfr-4.lib。
此外,第4行的错误指向可能导致此错误的内容(“将dll CGAL库与静态运行时混合是一个非常糟糕的主意......”),但我不知道这实际意味着什么(或我怎么解决它。)
此外,我尝试在另一台计算机上设置所有库,但我也遇到了同样的错误。
有人能指出我正确的方向来解决这个问题吗?如果您需要更多信息,请告诉我。
答案 0 :(得分:2)
This comment回答了这个问题:脚本cgal_create_cmake_script
可用于创建一个CMake文件,该文件可用于使用CGAL生成正确的Visual Studio项目。