编译doctest时遇到的一个包错如下:
/doctest/doctest/doctest.h:4041:47: error: size of array ‘altStackMem’ is not an integral constant-expression
4041 | static char altStackMem[4 * SIGSTKSZ];
| ^
make[2]: *** [CMakeFiles/tests.dir/build.make:76: CMakeFiles/tests.dir/test/main.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
根据错误提示知道明显是SIGSTKSZ
有问题,这个应该是一个系统变量,我在另一台机器上能够查看它的值:
于是,简单的解决方案是,找到该文件doctest/doctest/doctest.h
, 将SIGSTKSZ
替换调为具体数字8192
:
struct FatalConditionHandler
{
static bool isSet;
static struct sigaction oldSigActions[DOCTEST_COUNTOF(signalDefs)];
static stack_t oldSigStack;
// static char altStackMem[4 * SIGSTKSZ];
static char altStackMem[4 * 8192];
参考: