0

ここでOctave C++ コードを取得して でコンパイルしようとしていますg++ (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04) 4.6.4)

上記のこのトリミングされたバージョンは、次のようにコンパイルされg++ます。

#include <iostream>
#include <octave/oct.h>
using namespace std;

int main() {
//  Matrix L=Matrix(2,2);

  return 0;
}

しかし、行のコメントを外してMatrix L=Matrix(2,2);コンパイルするとg++ temp.cpp、エラーメッセージが表示されます。

/tmp/ccTa3Am5.o: In function `Array2<double>::~Array2()':
temp.cpp:(.text._ZN6Array2IdED2Ev[_ZN6Array2IdED5Ev]+0x1f): undefined reference to `Array<double>::~Array()'
/tmp/ccTa3Am5.o: In function `Array<double>::Array(dim_vector const&)':
temp.cpp:(.text._ZN5ArrayIdEC2ERK10dim_vector[_ZN5ArrayIdEC5ERK10dim_vector]+0x26): undefined reference to `Array<double>::get_size(dim_vector const&)'
/tmp/ccTa3Am5.o:(.rodata._ZTV5ArrayIdE[vtable for Array<double>]+0x10): undefined reference to `Array<double>::~Array()'
/tmp/ccTa3Am5.o:(.rodata._ZTV5ArrayIdE[vtable for Array<double>]+0x18): undefined reference to `Array<double>::~Array()'
collect2: ld returned 1 exit status

理由はわかりません。おそらく#include、適切なファイルがインストールされていないか、適切なライブラリにリンクしていないか、何らかの方法で Octave を誤用している可能性があります。

質問: これがコンパイルに失敗するのはなぜですか? どうすれば修正できますか?

mkoctfile --link-stand-alone temp.cpp上記のサイトに書かれている通りに使えば問題なくコンパイルg++できますが、最終的にはC++で書いた別のプログラムからOctave関数を呼び出せるようにしたいので、できれば使いたいと思っています。

4

3 に答える 3

1

私のコメントに示されているように、この Howto に簡単な例があります。したがって、あなたの場合、コンパイルを達成する簡単な方法は、次のようにメイクファイルを作成することです。

makefile:
all: temp

clean:
    -rm temp.o temp

temp: temp.o
      mkoctfile --link-stand-alone -o temp temp.o

temp.o: temp.cpp
        g++ -c -I$(OCTAVE_INCLUDE)
        -I$(OCTAVE_INCLUDE)octave -o temp.o temp.cpp

$(OCTAVE_INCLUDE)は、オクターブ インクルード パスに設定する必要がある環境変数です (例: /usr/include/octave-x.x.xx)。次に、コマンドを使用して、テスト アプリケーションをコンパイルしてリンクするだけですmake all

于 2013-09-03T13:16:32.813 に答える