0

Makefile で PGI コンパイラの -U__GNUG__ フラグを使用しようとしています。フォルダー内のすべての .cpp ファイルをコンパイルしようとしています。以下のとおりであります:

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__ を含めることで修正されるはずです。

どんな提案でも大歓迎です。

4

1 に答える 1

0

これは、C++11 の存在下で「std::isfinite」が正しく処理されない PGI pgc++ コンパイラの問題のようです。「--c++11」フラグを削除すると、問題を回避できます。

問題レポート PGI TPR#22065 を追加しました。今後のリリースで問題が解決されることを願っています。

于 2015-11-05T23:15:44.273 に答える