针对GNU的多精度库的C ++编译错误

时间:2011-09-06 22:47:19

标签: c++ compiler-errors gnu

在编译依赖于this third-party libraryGNU Multi-precision library(称为 azove 2.0 )时出现以下错误:

> make
g++ -Wall -O3 -DFIX_NUMBER_OF_SIGMDDNODE_SONS -DUSE_TIMER -I. -c conBDD.cpp -o conBDD.o
In file included from conBDDnode.hpp:27,
                 from conBDD.hpp:25,
                 from conBDD.cpp:22:
/usr/include/gmpxx.h: In destructor ‘__gmp_alloc_cstring::~__gmp_alloc_cstring()’:
/usr/include/gmpxx.h:2096: error: ‘strlen’ was not declared in this scope
conBDD.cpp: In member function ‘void conBDD::build()’:
conBDD.cpp:61: error: ‘numeric_limits’ was not declared in this scope
conBDD.cpp:61: error: expected primary-expression before ‘int’
conBDD.cpp:61: error: expected `;' before ‘int’
conBDD.cpp:68: error: expected primary-expression before ‘int’
conBDD.cpp:68: error: expected `;' before ‘int’
make: *** [conBDD.o] Error 1

我尝试过添加以下两行

#include <cstdlib> 

using std::strlen;

conBDD.cpp,但错误仍然存​​在。

我无法判断这是一个错误来自GNU的多精度库还是来自Azove。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:2)

我首先要分担责任。在项目中创建一个空的cpp文件,比如test.cpp,并且只包含有问题的gmpxx.h文件。如果你可以编译测试cpp,GMP就可以了。然后尝试只包括违规的azove标题。如果你可以在一个空文件中编译azove标题,那么azove就会被解除,你所包含/定义的东西会干扰它们。一旦缩小了问题的根源,您就会发现它更容易修复。