出现问题的代码:
void statevec_createQureg(Qureg *qureg, int numQubits, QuESTEnv env)
{
long long int numAmps = 1L << numQubits;
long long int numAmpsPerRank = numAmps/env.numRanks;
qureg->stateVec.real = aligned_alloc(64,numAmpsPerRank * sizeof(*(qureg->stateVec.real)));
qureg->stateVec.imag = aligned_alloc(64,numAmpsPerRank * sizeof(*(qureg->stateVec.imag)));
.
.
.
.
}
错误提示:
In function ‘statevec_createQureg’:
warning: implicit declaration of function ‘aligned_alloc’ [-Wimplicit-function-declaration]
qureg->stateVec.real = aligned_alloc(64,numAmpsPerRank * sizeof(*(qureg->stateVec.real)));
^~~~~~~~~~~~~
warning: incompatible implicit declaration of built-in function ‘aligned_alloc’
note: include ‘<stdlib.h>’ or provide a declaration of ‘aligned_alloc’
从提示信息中可以看出warning出现的原因是aligned_alloc()函数未先定义。虽然头文件 <stdlib.h>包含了该函数的定义,而且程序中也有
#include <stdlib.h>
但是编译器还是无法正常识别到aligned_alloc()在何时定义的。该错误在CSDN中查找无果,在如下链接中查到类似的问题的解决方案解决 warning: implicit declaration of function ‘mempcpy’ - 代码先锋网
解决办法是在程序#include<stdlib.h>之前添加
#define _GNU_SOURCE