2017-11-18 24 views
0

私は現在、Ubuntuのコード::ブロック上にあり、線形代数をしようとするといくつかの問題に遭遇します。コンパイラ設定]> [検索ディレクトリ>私が持っているコンパイラ "は/ usr /含める"SOVED:ArmadilloドットプロダクトC++

とコンパイラ設定の下>検索ディレクトリ>私が持っているリンカー "/ユーザー/ libが"

私liblapack-devの下

、 libblas-dev、libboost-dev、libarmadillo-devはapt-get経由でインストールされています

私はこのコードのどの部分がエラーを起こすかについてコメントしています。コードの難しい部分がなくても私のコードはうまく動くので、私はうまくインストールされたarmadilloがあると思いますか?なぜ私はすべての機能にアクセスできませんか?

#include <iostream> 
#include <armadillo> 
using namespace arma; 
using namespace std; 
int main() 
{ 
    mat A; 
    A<<1<<2<<endr<<3<<4; 
    cout<<A; 
    vec e=A.col(0); 
    vec r=A.col(1); 
    cout<<endl<<e<<endl<<r<<endl;//works perfectly up to here 
    //if only there was not more of these codes 
    cout<<e*r<<endl;//doesnt work from here anymore 
    float y=dot(A,A);//from here on i get the error message: 
    cout<<y<<endl;//'wrapper_ddot_' is not defined 
    double z=as_scalar(e*r);//and wrapper_blas.hpp file opens 
    double t=dot(e,r); 
    cout<<z<<endl;//and points me to line 185 
    return 0;//with an error 
} 

答えて

0

コードにバグがあります。 e*rを使用していますが、それらは両方とも2x1なのでee.t()*rと転記する必要がありますので、1x1の製品が得られます。また、同じ問題が3行下にあります。 apt-getを使用してArmadilloをインストールした場合、通常はblas/lapackライブラリを追加する必要はありません。リンカーに-larmadilloフラグを使用するだけで十分です。

+0

iveただウルの解決策を試みましたが、それでも私に同じエラーを与えている仕事はまだありません:/。他のすべてをコメントアウトする場合でも人々はこれらの機能を転置なしで使用していますが、カップルのチュートリアルで見られるようなものです。おかげで – maxsieg

+0

実際にあなたはリンカにどのコマンドを渡しますか?私はちょうどいくつかの他の人が "g ++ -O2 -o armadillo_example armadillo_example.cpp -larmadillo"をリンカに使用するのを見ましたが、ディレクトリintotをプロジェクトのファイルに変更しますか? – maxsieg

+0

code :: blocksを使用する場合は、 'リンカー設定 - >その他のリンカーオプション'の下に '-larmadillo'を追加するだけです。あなたが言及したコマンドラインの例もうまくいくはずです。 –

関連する問題