编译和 运行 CGAL 三角剖分演示
Compiling and Running CGAL Triangulation Demo
我正在尝试使用 CGAL 库显示 2D Delaunay 三角剖分,如示例 here
我的代码如下所示:
#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/draw_triangulation_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Point Point;
int main(void){
Point a(1,1), b(2,1), c(2,2), d(1,2);
Triangulation T;
T.insert(a);
T.insert(b);
T.insert(c);
T.insert(d);
CGAL::draw(T);
return 0;
}
当我尝试使用 g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp
编译此代码时,程序编译成功,但在运行时我得到 Impossible to draw because CGAL_USE_BASIC_VIEWER is not defined
通过搜索 Google,我发现有人建议使用 g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp -DCGAL_USE_BASIC_VIEWER
,这会在编译时产生以下错误:/usr/include/CGAL/Qt/Basic_viewer_qt.h:30:10: fatal error: QApplication: No such file or directory #include <QApplication>
我正在使用 ubuntu 19.04,所以我使用 sudo apt-get install libcgal-dev
和 sudo apt-get install libcgal-qt5-dev
安装了 CGAl
我也尝试安装sudo apt-get install libqt5svg5-dev libqt5opengl5-dev
来解决这个错误,但是没有用。
我需要安装额外的库吗?也许编译必须以不同的方式进行?
谢谢
好的,对于遇到相同问题的任何人,以下是我的解决方法:
首先,我使用 locate QApplication
命令在我的系统上查找 QApplication
头文件的位置。在使用locate
之前一定要运行sudo updatedb
。如果 locate
找不到 QApplication
的位置,那么您缺少 qt 库。尝试 sudo apt-get install qt5-default
和我在问题中提到的其他库,运行 sudo updatedb
并再次尝试 locate QApplication
。
当您找到 QApplication
的路径时,只需使用 -I
选项来指示编译器使用它。这是一个示例 g++ -o delaunayTest delaunayTest.cpp -lCGAL -lgmp -lCGAL_Qt5 -DCGAL_USE_BASIC_VIEWER -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets/
(因为在我的例子中,QApplication
在目录 /usr/include/x86_64-linux-gnu/qt5/QtWidgets/
中)
尝试用这个编译,你可能会得到另一个头文件错误。使用 locate
重复相同的过程,直到不再出现头文件错误。
到那时,您可能会遇到 undefined reference to symbol
错误。
为了解决这个问题,再次使用locate
找到导致错误的文件的位置(例如libQt5OpenGL.so.5
)并将路径原样添加到编译命令中(例如g++ -o delaunayTest delaunayTest.cpp /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
) 以及之前的所有选项。
您可能还会遇到几个 undefined reference to symbol
错误。继续使用相同的方法,直到你没有得到为止。
此时程序应该正确编译并且 运行 正确。
请注意,如果您安装了多个版本的 qt,那么以上可能无法正常工作(例如,如果您的系统中安装了使用 qt 的软件,如 MATLAB 或 anaconda。您会知道,因为 locate
将为上述步骤中的每个文件生成许多路径)。在这种情况下,我建议构建一个虚拟机,下载 CGAL 库和 qt5-default
并按照上述步骤进行操作,因为这很可能在安装了多个 qt 的系统中不起作用。
使用 CMake 的另一个选项(可能是最简单的)是使用内置脚本生成文件:
- 从源文件目录,运行
cgal_create_CMakeLists -c Qt5
- 编辑生成的
CMakeLists.txt
添加行 add_definitions(-DCGAL_USE_BASIC_VIEWER)
我的生成和编辑 CMakeLists.txt
:
# Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.1...3.15)
project( tmp_cgal )
# CGAL and its components
find_package( CGAL QUIET COMPONENTS Qt5 )
if ( NOT CGAL_FOUND )
message(STATUS "This project requires the CGAL library, and will not be compiled.")
return()
endif()
add_definitions(-DCGAL_USE_BASIC_VIEWER) # <==== I've added this
# Boost and its components
find_package( Boost REQUIRED )
if ( NOT Boost_FOUND )
message(STATUS "This project requires the Boost library, and will not be compiled.")
return()
endif()
# include for local directory
# include for local package
# Creating entries for all C++ files with "main" routine
# ##########################################################
create_single_source_cgal_program( "b.cpp" )
- 创建一个
build
目录:mkdir build
- 更改目录:
cd build
- 生成构建文件:
cmake ..
- 构建:
make
- 运行 二进制文件。对我来说是
./b
因为我的源文件是 b.cpp
环境:
这些说明适用于安装了 libcgal-dev
、libcgal-qt5-dev
和 qtbase5-dev
软件包的 Ubuntu 20.04.1(或类似版本)(当然, cmake
、make
和 g++
).
主要参考文献:
我正在尝试使用 CGAL 库显示 2D Delaunay 三角剖分,如示例 here
我的代码如下所示:
#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/draw_triangulation_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Point Point;
int main(void){
Point a(1,1), b(2,1), c(2,2), d(1,2);
Triangulation T;
T.insert(a);
T.insert(b);
T.insert(c);
T.insert(d);
CGAL::draw(T);
return 0;
}
当我尝试使用 g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp
编译此代码时,程序编译成功,但在运行时我得到 Impossible to draw because CGAL_USE_BASIC_VIEWER is not defined
通过搜索 Google,我发现有人建议使用 g++ -o cgalTest.exe cgalTest.cpp -lCGAL -lgmp -DCGAL_USE_BASIC_VIEWER
,这会在编译时产生以下错误:/usr/include/CGAL/Qt/Basic_viewer_qt.h:30:10: fatal error: QApplication: No such file or directory #include <QApplication>
我正在使用 ubuntu 19.04,所以我使用 sudo apt-get install libcgal-dev
和 sudo apt-get install libcgal-qt5-dev
我也尝试安装sudo apt-get install libqt5svg5-dev libqt5opengl5-dev
来解决这个错误,但是没有用。
我需要安装额外的库吗?也许编译必须以不同的方式进行?
谢谢
好的,对于遇到相同问题的任何人,以下是我的解决方法:
首先,我使用 locate QApplication
命令在我的系统上查找 QApplication
头文件的位置。在使用locate
之前一定要运行sudo updatedb
。如果 locate
找不到 QApplication
的位置,那么您缺少 qt 库。尝试 sudo apt-get install qt5-default
和我在问题中提到的其他库,运行 sudo updatedb
并再次尝试 locate QApplication
。
当您找到 QApplication
的路径时,只需使用 -I
选项来指示编译器使用它。这是一个示例 g++ -o delaunayTest delaunayTest.cpp -lCGAL -lgmp -lCGAL_Qt5 -DCGAL_USE_BASIC_VIEWER -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets/
(因为在我的例子中,QApplication
在目录 /usr/include/x86_64-linux-gnu/qt5/QtWidgets/
中)
尝试用这个编译,你可能会得到另一个头文件错误。使用 locate
重复相同的过程,直到不再出现头文件错误。
到那时,您可能会遇到 undefined reference to symbol
错误。
为了解决这个问题,再次使用locate
找到导致错误的文件的位置(例如libQt5OpenGL.so.5
)并将路径原样添加到编译命令中(例如g++ -o delaunayTest delaunayTest.cpp /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
) 以及之前的所有选项。
您可能还会遇到几个 undefined reference to symbol
错误。继续使用相同的方法,直到你没有得到为止。
此时程序应该正确编译并且 运行 正确。
请注意,如果您安装了多个版本的 qt,那么以上可能无法正常工作(例如,如果您的系统中安装了使用 qt 的软件,如 MATLAB 或 anaconda。您会知道,因为 locate
将为上述步骤中的每个文件生成许多路径)。在这种情况下,我建议构建一个虚拟机,下载 CGAL 库和 qt5-default
并按照上述步骤进行操作,因为这很可能在安装了多个 qt 的系统中不起作用。
使用 CMake 的另一个选项(可能是最简单的)是使用内置脚本生成文件:
- 从源文件目录,运行
cgal_create_CMakeLists -c Qt5
- 编辑生成的
CMakeLists.txt
添加行add_definitions(-DCGAL_USE_BASIC_VIEWER)
我的生成和编辑 CMakeLists.txt
:
# Created by the script cgal_create_CMakeLists
# This is the CMake script for compiling a set of CGAL applications.
cmake_minimum_required(VERSION 3.1...3.15)
project( tmp_cgal )
# CGAL and its components
find_package( CGAL QUIET COMPONENTS Qt5 )
if ( NOT CGAL_FOUND )
message(STATUS "This project requires the CGAL library, and will not be compiled.")
return()
endif()
add_definitions(-DCGAL_USE_BASIC_VIEWER) # <==== I've added this
# Boost and its components
find_package( Boost REQUIRED )
if ( NOT Boost_FOUND )
message(STATUS "This project requires the Boost library, and will not be compiled.")
return()
endif()
# include for local directory
# include for local package
# Creating entries for all C++ files with "main" routine
# ##########################################################
create_single_source_cgal_program( "b.cpp" )
- 创建一个
build
目录:mkdir build
- 更改目录:
cd build
- 生成构建文件:
cmake ..
- 构建:
make
- 运行 二进制文件。对我来说是
./b
因为我的源文件是b.cpp
环境:
这些说明适用于安装了 libcgal-dev
、libcgal-qt5-dev
和 qtbase5-dev
软件包的 Ubuntu 20.04.1(或类似版本)(当然, cmake
、make
和 g++
).
主要参考文献: