ここで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関数を呼び出せるようにしたいので、できれば使いたいと思っています。