Я собираю библиотеку с Petsc, используя Clang 3.4 и получаю:
error: use of undeclared identifier 'creal'
это следует из следующего определения:
petscmath.h:121:38: note: expanded from macro 'PetscRealPartComplex'
#define PetscRealPartComplex(a) creal(a)
единственная соответствующая информация, которую я могу найти, этот, я не знаю, является ли это чем-то специфичным для компилятора и отсутствуют некоторые библиотеки, или у меня есть некоторые проблемы с Petsc.
Я попытался использовать `cimag () ‘, как в небольшом тестовом файле, но я не могу скомпилировать его ни с clang3.4, ни с gcc4.8.
У любого есть идеи, что происходит. Google не показывает подобные темы …
РЕДАКТИРОВАТЬ:
Итак, вот простой пример:
#include <complex.h>
int main ()
{
double complex z;
double cc = cimag(z);
}
Это делает скомпилировать с Gcc4.8 (из macports): g++-mp-4.8 main.cc -o main
Однако в режиме C11 это не : g++-mp-4.8 -std=c++11 main.cc -o main
:
expected initializer before 'z' double complex z;
лязг не скомпилируйте его в любом случае и выдайте ту же ошибку, что и выше.
Ссылка: http://pubs.opengroup.org/onlinepubs/7999959899/basedefs/complex.h.html
Заголовок должен определять следующие макросы:
сложный
Expands to _Complex.
Ссылка: http://en.cppreference.com/w/c/numeric/complex
Если макро константа STDC_NO_COMPLEX(С11) определяется
Компилятор, заголовок и все перечисленные здесь имена
не предоставлен.
Обратите внимание, что я получаю те же результаты при указании -std=c++11
с GCC, но не -x c -std=c11
, YMMV.
Других решений пока нет …