在编译依赖于this third-party library的GNU 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。任何指针都将非常感激。
答案 0 :(得分:2)
我首先要分担责任。在项目中创建一个空的cpp文件,比如test.cpp,并且只包含有问题的gmpxx.h文件。如果你可以编译测试cpp,GMP就可以了。然后尝试只包括违规的azove标题。如果你可以在一个空文件中编译azove标题,那么azove就会被解除,你所包含/定义的东西会干扰它们。一旦缩小了问题的根源,您就会发现它更容易修复。