Код, написанный на C++ с библиотеками LapackE и MPI, отлично компилируется и работает в Windows, где я использую GNU C++ 4.9.2.
При переносе этого кода на сервер Linux (CentOS) не удается скомпилировать! GNU C++ на Linux-машине — 4.4.7. В обоих случаях я использовал идентичные заголовочные файлы LapackE. MPI хорошо работает на машине с Linux.
Изучив выходные файлы препроцессора на обеих машинах, я могу связать сообщения об ошибках со следующими ситуациями, когда объявления complex в исходном коде были заменены на _Complex. Вот пример объявления сложного динамического массива HAMILTONIAN, который имеет проблемы при компиляции в Linux:
В ИСТОЧНИКЕ: lapack_complex_double* HAMILTONIAN;
В WINDOWS PREPROC. ФАЙЛ (работает хорошо): _lapack_complex_double* HAMILTONIAN;
В ПРЕДПРОЦЕССЕ LINUX. ФАЙЛ (не компилируется): double _Complex* HAMILTONIAN;
Может ли это быть связано с разными версиями GCC?
Я пробовал #define _Complex complex, но в итоге это не помогло.
Некоторые сообщали о проблеме взаимодействия C99 _Complex и комплекса C++: возможная аналогичная проблема< /а>.
Пожалуйста помоги. Спасибо!
/home
, используют что-то из<complex>
и"minMathsForEPM.h"
, но не могут явно#include
их сами. Таким образом, вы обязаны сделать это самостоятельно. - person Sam Varshavchik   schedule 14.12.2016g++ -E mysourcefile.cpp
(предполагая компилятор g++ из-за Centos), компилятор выдаст результаты препроцессора вместо исполняемого файла, который в сочетании с ошибкой компилятора, которую вы получаете при обычной сборке, должен помочь вам получить некоторое представление о том, что действительно произошло неправильный. Для достижения наилучших результатов используйте те же флаги компилятора, что и при обычной сборке. - person user4581301   schedule 14.12.2016