我是CGAL的新手,我在Ubuntu 16.04上使用CGAL 4.7-4。 我正在尝试编译并运行一个非常简单的.cpp。这是代码:
#include <iostream>
#include <CGAL/Cartesian.h>
int main()
{
int p=2;
std::cout << "hello " << p << std::endl;
return 0;
}
我添加了
行#include <CGAL/Cartesian.h>
因为我想看看如何使用更多库进行编译。然后我在终端
上写了这一行g++ -lCGAL -lgmp prova.cpp
但是我收到了这个错误:
/tmp/cc9DA7Ml.o:在函数'CGAL :: Interval_nt :: Test_runtime_rounding_modes :: Test_runtime_rounding_modes()'中:
prova.cpp :(。text._ZN4CGAL11Interval_ntILb0EE27Test_runtime_rounding_modesC2Ev [_ZN4CGAL11Interval_ntILb0EE27Test_runtime_rounding_modesC5Ev] + 0xd2):未定义引用'CGAL :: assertion_fail(char const *,char const *,int,char const *)'
prova.cpp :(。text._ZN4CGAL11Interval_ntILb0EE27Test_runtime_rounding_modesC2Ev [_ZN4CGAL11Interval_ntILb0EE27Test_runtime_rounding_modesC5Ev] + 0x180):未定义引用'CGAL :: assertion_fail(char const *,char const *,int,char const *)'
/tmp/cc9DA7Ml.o:在函数'CGAL :: Interval_nt :: Test_runtime_rounding_modes :: Test_runtime_rounding_modes()'中:
prova.cpp :(。text._ZN4CGAL11Interval_ntILb1EE27Test_runtime_rounding_modesC2Ev [_ZN4CGAL11Interval_ntILb1EE27Test_runtime_rounding_modesC5Ev] + 0xd2):未定义引用'CGAL :: assertion_fail(char const *,char const *,int,char const *)'
prova.cpp :(。text._ZN4CGAL11Interval_ntILb1EE27Test_runtime_rounding_modesC2Ev [_ZN4CGAL11Interval_ntILb1EE27Test_runtime_rounding_modesC5Ev] + 0x180):未定义引用'CGAL :: assertion_fail(char const *,char const *,int,char const *)'
collect2:错误:ld返回1退出状态
即使我写了这些内容中的任何一行,我也遇到了同样的错误:
g++ -lCGAL -lmpfr -lgmp prova.cpp
g++ -I/opt/local/include -L/opt/local/lib -lCGAL -lgmp prova.cpp
g++ -I/opt/local/include -L/opt/local/lib/ -lCGAL -lgmp prova.cpp
g++ -I/usr/include -L/usr/bin -lCGAL -lgmp prova.cpp
g++ -I/usr/bin -L/usr/lib -lCGAL -lgmp prova.cpp
如果我写了
g++ -lCartesian.a -lCGAL -lgmp prova.cpp
或
g++ -lCartesian -lCGAL -lgmp prova.cpp
我在终端上收到此错误
/ usr / bin / ld:找不到-lCartesian.a
collect2:错误:ld返回1退出状态
最后如果我写了
g++ -I/usr/include/CGAL -L/usr/include/CGAL -lCGAL -lgmp prova.cpp
我收到了很长的错误列表:
/usr/include/CGAL/gmpxx_coercion_traits.h:35:0中包含的文件,
from /usr/include/CGAL/mpz_class.h:29,
from /usr/include/CGAL/gmpxx.h:47,
from /usr/include/CGAL/is_convertible.h:28,
from /usr/include/CGAL/Rational_traits.h:31,
from /usr/include/CGAL/number_type_basic.h:48,
from /usr/include/CGAL/basic.h:44,
from /usr/include/CGAL/Cartesian/Cartesian_base.h:28,
from /usr/include/CGAL/Cartesian.h:28,
from prova.cpp:2:
/usr/include/mpfr.h:181:3:错误:'mp_limb_t'没有命名类型 mp_limb_t * _mpfr_d;
/usr/include/mpfr.h:279:1:错误:'__ GMP_DECLSPEC'没有命名类型 __MPFR_DECLSPEC __gmp_const char * mpfr_get_version _MPFR_PROTO((void));
[...]
在/usr/include/CGAL/mpz_class.h:29:0中包含的文件中,
from /usr/include/CGAL/gmpxx.h:47,
from /usr/include/CGAL/is_convertible.h:28,
from /usr/include/CGAL/Rational_traits.h:31,
from /usr/include/CGAL/number_type_basic.h:48,
from /usr/include/CGAL/basic.h:44,
from /usr/include/CGAL/Cartesian/Cartesian_base.h:28,
from /usr/include/CGAL/Cartesian.h:28,
from prova.cpp:2:
/usr/include/CGAL/gmpxx_coercion_traits.h:43:3:错误:':: __ gmp_expr'尚未宣布
:: __ gmp_expr&LT; T,U&gt;,:: __ gmp_expr&lt; T,U> &GT; {
[...]
长长的清单如下:
包含在/usr/include/CGAL/double.h:30:0,
中的文件
from /usr/include/CGAL/number_type_basic.h:60,
from /usr/include/CGAL/basic.h:44,
from /usr/include/CGAL/Cartesian/Cartesian_base.h:28,
from /usr/include/CGAL/Cartesian.h:28,
from prova.cpp:2:
/usr/include/CGAL/number_utils.h:实例化'typename CGAL :: Real_embeddable_traits :: Is_finite :: result_type CGAL :: is_finite(const Real_embeddable&amp;)[with Real_embeddable = double; typename CGAL :: Real_embeddable_traits :: Is_finite :: result_type = CGAL :: Null_tag]':
/usr/include/CGAL/double.h:201:27:从这里要求
/usr/include/CGAL/number_utils.h:263:75:错误:无法调用'(CGAL :: INTERN_RET :: Real_embeddable_traits_base&gt; :: Is_finite {aka CGAL :: Null_functor})(const double&amp; )'
return typename Real_embeddable_traits< Real_embeddable >::Is_finite()( x );
我在网上浏览了很多,我理解编译的链接部分有问题(核心没问题),但我真的对解决方案一无所知。你有什么主意吗?在此先感谢您的帮助。
答案 0 :(得分:4)
g++ prova.cpp -lCGAL
有效......似乎这只是一个有序的问题。
答案 1 :(得分:0)
只需使用C ++版本14。
如果您使用的是Qt,请通过在.pro
文件中执行以下操作来更改C ++版本。
CONFIG += c++14