問題如下:
In file included from libs/ezsat/../minisat/Solver.h:24, from libs/ezsat/ezminisat.cc:40: libs/ezsat/../minisat/Vec.h: In member function ‘void Minisat::vec<T, _Size>::capacity(Size)’: libs/ezsat/../minisat/Vec.h:105:28: error: ‘::reallocarray’ has not been declared 105 | ((data = (T*)::reallocarray(data, (cap += add), sizeof(T))) == NULL) | ^~~~~~~~~~~~ Makefile:728: recipe for target 'libs/ezsat/ezminisat.o' failed make: *** [libs/ezsat/ezminisat.o] Error 1 make: *** Waiting for unfinished jobs....
解法如下:
$ vim libs/ezsat/../minisat/Vec.h 98 template<class T, class _Size> 99 void vec<T,_Size>::capacity(Size min_cap) { 100 if (cap >= min_cap) return; 101 Size add = max((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2 102 const Size size_max = std::numeric_limits<Size>::max(); 103 if ( ((size_max <= std::numeric_limits<int>::max()) && (add > size_max - cap)) 104 || ( 105 //#ifdef _DEFAULT_SOURCE 106 // ((data = (T*)::reallocarray(data, (cap += add), sizeof(T))) == NULL) 107 //#else 108 ((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) 109 //#endif 110 && errno == ENOMEM) ) 111 throw OutOfMemoryException(); 112 }