Makefile使用PGI编译器链接Armadillo库

时间:2015-11-03 22:24:04

标签: makefile gpu gnu openacc

我正在尝试在Makefile中使用PGI编译器的-U__GNUG__标志,尝试编译文件夹中的所有.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 __。

来修复

任何建议都将非常感谢。

1 个答案:

答案 0 :(得分:0)

这似乎是PGI pgc ++编译器的问题,其中“std :: isfinite”在C ++ 11存在的情况下未正确处理。删除“--c ++ 11”标志将解决此问题。

我添加了一份问题报告,PGI TPR#22065,我们希望在将来的版本中解决问题。