gpt4 book ai didi

c++ - 在 Windows 上编译/链接时 CGAL 未解析的外部

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:08 27 4
gpt4 key购买 nike

在编译使用 CGAL 库的某些部分的测试程序时,我遇到了奇怪的(对我来说)错误。

一、环境:

  • Windows 7 64 位
  • 提升 1.53
  • CGAL 4.3
  • Qt 4.8.4
  • CMake 2.8.10.2
  • Visual Studio 2010 专业人士
  • 我安装了 32 位的所有库(如果这是安装过程中的一个选项)。

安装错误?

为了在我的电脑上安装 CGAL,我遵循了这个教程:http://www.cgal.org/windows_installation.html .我必须在这里注意,这对我来说不是开箱即用的。在CMake的CGAL配置阶段,没有找到boost库(虽然我设置了相应的环境变量,如教程中所述)。在 CMake 中设置不正确的变量后,我能够完成配置和生成阶段。之后,我能够在 Visual Studio 中编译 CGAL 的调试和发布配置。

为了测试CGAL lib是否安装成功,我尝试编译运行examples和demo。这些也没有立即起作用。问题是找不到 CGAL 和 Boost header (和二进制文件)。在 项目属性 => 配置属性 => C/C++ => 附加包含目录项目属性 => 配置属性 => 链接器 => 附加库目录 中设置正确的路径后em> 可以构建示例和演示。之后我成功运行了这些示例。

实际问题

现在,我正在尝试编写一个简单的程序,以便能够进行特定的练习(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,我可以像上面那样编译这两个文件。但是,当我尝试创建一个点(如 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 库与静态运行时混合是一个非常糟糕的主意......”),但我不知道这实际上意味着什么(或我该如何解决)。

此外,我尝试在另一台计算机上设置所有库,但我也遇到了同样的错误。

谁能指出我解决这个问题的正确方向?如果您需要更多信息,请告诉我。

最佳答案

This comment回答了问题:脚本 cgal_create_cmake_script 可用于创建 CMake 文件,该文件可用于使用 CGAL 生成正确的 Visual Studio 项目。

关于c++ - 在 Windows 上编译/链接时 CGAL 未解析的外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20597873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com