Makefile для ссылки на библиотеку Armadillo с помощью компилятора PGI

Я пытаюсь использовать флаг -U__GNUG__ компилятора PGI в Makefile, пытаясь скомпилировать все файлы .cpp в папке, связываясь с Armadillo (с помощью компилятора g++ код компилируется и запускается). Makefile, который у меня есть составляет:

CC=pgc++ 
CFLAGS= -U__GNUG__  -std=c++11 -fast -acc  -Minfo=accel -larmadillo -lgsl -w 

all: 
   ${CC} ${CFLAGS} *.cpp -o cg 
clean: 
   rm -Rf cg pgprof* *.o core

Кажется, что компиляция файла объектов работает, но не удается скомпилировать окончательный исполняемый файл. Что не так с этим Makefile?

Компиляция кода с использованием:

~$ make

Я получаю следующие ошибки:

cis.o: In function `arma::Col<double>::pod_type arma::op_norm::vec_norm_2<arma::Col<double> >(arma::Proxy<arma::Col<double> > const&, arma::arma_not_cx<arma::Col<double>::elem_type>::result const*)':
/usr/local/include/armadillo_bits/debug.hpp:173: undefined reference to `isfinite'
cis.o: In function `double arma::op_norm::vec_norm_2_direct_std<double>(arma::Mat<double> const&)':
/usr/local/include/armadillo_bits/debug.hpp:173: undefined reference to `isfinite'
cis.o: In function `void arma::arma_ostream::print_elem<double>(std::ostream&, double const&, bool)':
/usr/local/include/armadillo_bits/debug.hpp:173: undefined reference to `isfinite'
cis.o: In function `std::isfinite(double)':
/usr/local/include/armadillo_bits/debug.hpp:173: undefined reference to `isfinite'
cis.o: In function `bool arma::arma_isfinite<double>(double)':
/usr/local/include/armadillo_bits/debug.hpp:173: undefined reference to `isfinite'
davidson.o:davidson.cpp:(.gnu.linkonce.t._ZN4arma7op_norm10vec_norm_2INS_11subview_colIdEEEENT_8pod_typeERKNS_5ProxyIS4_EEPKNS_11arma_not_cxINS4_9elem_typeEE6resultE+0x2bb): more undefined references to `isfinite' follow
pgacclnk: child process exit status 1: /usr/bin/ld
make: *** [all] Error 2

это должно быть исправлено включением флага -U__GNUG__.

Любое предложение будет очень признательно.


person user3116936    schedule 03.11.2015    source источник
comment
Использует ли make команду, которую вы ожидаете использовать для компиляции вашего двоичного файла? (Вы не включили это в вставленный вывод.)   -  person Etan Reisner    schedule 04.11.2015


Ответы (1)


Похоже, это проблема с компилятором PGI pgc++, где "std::isfinite" неправильно обрабатывается при наличии C++11. Удаление флага "--c++11" решит проблему.

Я добавил отчет о проблеме, PGI TPR # 22065, и мы надеемся, что проблема будет решена в следующем выпуске.

person Mat Colgrove    schedule 05.11.2015
comment
Спасибо за ваш ответ, но проблем больше, потому что тот же код дает неправильные результаты при выполнении после того, как он был скомпилирован с использованием pgc++. Есть идеи? - person user3116936; 06.11.2015
comment
Не случайно, хотя я предполагаю, что эти две проблемы не связаны. Можете ли вы опубликовать небольшой воспроизводящий пример для неправильного ответа? - person Mat Colgrove; 07.11.2015