CGAL编译器错误:未定义引用`CGAL :: assertion_fail(char const *,char const *,int,char const *)'

时间:2016-11-15 10:15:38

标签: compiler-errors linker g++ cgal

我是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 );

我在网上浏览了很多,我理解编译的链接部分有问题(核心没问题),但我真的对解决方案一无所知。你有什么主意吗?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

g++ prova.cpp -lCGAL

有效......似乎这只是一个有序的问题。

答案 1 :(得分:0)

只需使用C ++版本14。

如果您使用的是Qt,请通过在.pro文件中执行以下操作来更改C ++版本。

CONFIG += c++14