Код, написанный на C ++ с библиотеками LapackE и MPI, компилируется и отлично работает в Windows, где я использую GNU C ++ 4.9.2.
Перенос этого кода на сервер Linux (CentOS) не компилируется! GNU C ++ на Linux-машине — это 4.4.7. Я использовал идентичные заголовочные файлы LapackE в обоих случаях. MPI хорошо работает на Linux-машине.
После проверки выходных файлов препроцессора на обеих машинах я могу связать сообщения об ошибках со следующими ситуациями, когда сложный объявления в исходном коде были заменены _Сложный. Вот пример объявления сложного динамического массива HAMILTONIAN, который имеет проблему при компиляции в Linux:
В ОРИГИНАЛЬНОМ ИСТОЧНИКЕ:
lapack_complex_double * HAMILTONIAN;
В ОКНА ПРЕДВАРИТЕЛЬНО. ФАЙЛ (работает хорошо):
_lapack_complex_double * HAMILTONIAN;
В LINUX PREPROC. ФАЙЛ (не компилируется):
двойной _комплекс * гамильтониан;
Может ли это быть проблемой, связанной с различными версии из GCC?
я пробовал #define _Комплексный комплекс но это не помогло в конце.
Некоторые сообщили о проблеме с совместимостью C99 _Complex и C ++ complex: возможна похожая проблема.
Пожалуйста помоги. Спасибо!
он компилируется нормально, даже если я удаляю
"extern "C"
и просто сохраните #include «Headers_LAPACKE / …» в блоке № 1 кода.
Сделай это. LAPACK заголовки имеют #if __cplusplus
проверки внутри них, они разработаны так, что пользовательский код не нуждается и не должен иметь, extern "C"
окружая их.
Во-первых, установите компилятор GCC на 4.8 или выше: в моем случае нам пришлось сохранить старый GCC 4.4.7 и одновременно установить GCC 4.9.2. Чтобы иметь возможность использовать более новую версию в компиляции MPI, нужно добавить ее в начало PATH. Для этого смотрите ответ на Как изменить компилятор GCC по умолчанию для использования с MPI в Linux CentOS
Во-вторых, при компиляции с помощью LapackE (оболочки Lapack для C) необходимо использовать следующие параметры препроцессора (-D):
-D LAPACK_COMPLEX_STRUCTURE -D HAVE_LAPACK_CONFIG_H -D ADD_
Пример:
bash-4.1 $ mpiCC main.cpp -L / home / USER1 / lapack-3.6.1 -lapacke -llapack -lblas -lm -Wall -D LAPACK_COMPLEX_STRUCTURE -D HAVE_LAPACK_CONFIG_H -D ADD_
Удостоверься что:
bash-4.1 $ gcc — версия
дает 4,8 или выше. В моем случае это было: GCC (GCC) 4.9.3