1

私はプロジェクトにアルマジロを使用していますが、一般的にはうまく機能しています。プロジェクトは Xcode ベースであり、これまでのところ、それを機能させることができた唯一の方法は次のとおりです (/usr/include/ のヘッダー検索パスを追加しても機能しないようです)。

#include "/usr/include/armadillo"

さて、私は初めて行列の乗算を実行しようとしています。他に原因がないことを確認するために、考えられる最も簡単なことを実行しました。

mat aa = eye(3,3)*eye(3,3);

しかし、これによりリンカーエラーが発生します:

* 「_wrapper_dgemm_」、以下から参照:

void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)in DynamicGridPoint.o

誰がこれを引き起こしているのか知っていますか? 例 (行列の乗算を含む) はコマンド ラインから問題なくコンパイルされるため、これは xcode のセットアップに関係していると思います。

これまでの回答に基づいて編集

そのため、プロジェクトの「その他のリンカー フラグ」に -larmadillo を含め、ヘッダーとライブラリの検索パスに「/usr/lib」を追加して、ランタイム ライブラリにリンクしようとしましたが、リンク エラーが発生しました:「ld : -larmadillo' のライブラリが見つかりません

なぜこれが起こっているのかについて何か考えはありますか?

/usr/lib には、次の (関連する) ファイルが含まれています。

  • libarmadillo.3.80.2.dylib
  • libarmadillo.3.dylib
  • libarmadillo.dylib
4

2 に答える 2

2

アルマジロ ランタイム ライブラリ (例: -larmadillo) に対してリンクしていません。

これを修正するには、Xcode を armadillo ランタイム ライブラリとリンクするように設定するか、Armadillo の設定を編集してランタイム ライブラリを使用しないようにします。

後者は、「include/armadillo_bits/config.hpp」を編集し、ARMA_USE_WRAPPER をコメントアウトすることによって行われます。次に、lapack と blas を直接リンクするか (例: -llapack -lblas)、または Accelerate フレームワーク (例: -framework Accelerate) を使用する必要があります。

于 2013-04-13T13:27:47.883 に答える
1

armadillo 共有ライブラリをリンクする必要があります。例の Makefile では、作成するルールは次のとおりです。

all: example1 example2                                                          

example1: example1.cpp  
  $(CXX) $(CXXFLAGS)  -o $@  $<  $(LIB_FLAGS) 

LIB_FLAGSは、以前に次のように定義されています。

LIB_FLAGS = -larmadillo $(EXTRA_LIB_FLAGS)

ifeq (macos,macos)                                                              
  EXTRA_LIB_FLAGS = -framework Accelerate                                     
endif

そのため、XCode プロジェクトに libarmadillo を含める方法を見つける必要があります。Accelerate フレームワークはオプションです。私はそれを使用したことがありません。

于 2013-04-13T02:47:36.923 に答える