解決策: mkoctfile を使用して配布可能な exe を作成し、この exe をコア Octave ファイル、および必要に応じて他の .oct および .m ファイルと共にパッケージ化します。
ステップ 1: スタンドアロンの実行可能ファイルを作成します。
ここで動作するコードを確認できます:
http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html
特に「embedded.cc」というファイル。
そのファイルを次のように簡略化しました。
#include <iostream>
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/parse.h>
int
main (int argc, char *argvc[])
{
string_vector argv (2);
argv(0) = "embedded";
argv(1) = "-q";
octave_main (2, argv.c_str_vec(), 1);
octave_value_list in = octave_value (argvc[1]);
octave_value_list out = feval ("your_custom_m_file", in);
if (!error_state && out.length () > 0)
{
}
else
{
std::cout << "invalid\n";
}
return 0;
}
コマンドでこのファイルをビルドします
mkoctfile --link-stand-alone embedded.cc -o embedded
警告がスローされる場合がありますが、エラーがスローされない限り問題ありません。embedded.exe ファイルがビルドされ、実行できるようになります。唯一の問題は、オクターブを素晴らしいものにするすべての利点が欠けていることです。それらを提供する必要があります。
ステップ 2: 配布フォルダーを作成する
多くの Octave ファイルのコピーを作成する必要があります。これ専用のディレクトリをお勧めします。少なくとも、\bin 内のすべてまたはほとんどの DLL のコピーが必要です。さらに、配布可能な実行可能ファイルをこのディレクトリに配置します。
ステップ 3: その他のファイルもぐらたたき
ここで、.m スクリプトを実行するために必要な他のファイルを見つける必要があります。\oct\i686-pc-mingw32*.oct と \share\octave\3.2.4\m\*\*.m を配布ディレクトリにコピーすることで、この手順を簡素化できます。もぐらたたきステップを防ぎます。
さて、あなたはもぐらたたきをするか、「私の仲間はどこにいるの?」という昔ながらの伝統を演じなければなりません。
- コマンド プロンプトを開き、配布フォルダーに移動します。
- 有用な PATH 文字列をすべて取り除きます。あなたの顧客はそれらを持っていません。
プログラム embedded.exe の実行を試みます。次のようなエラーが表示されます。
embedded.exe
エラー: 行 83 列 22 付近の「max」未定義
エラー: 引数リスト要素番号 1 を
評価中 エラー: 引数リスト要素番号 1 を評価中
エラー: 呼び出し元:
エラー: T:\sms\Development\research\c2\disttest\ strcat.m 行 83、列 3
エラー: T:\sms\Development\research\c2\disttest\file_in_path.m 行 5、列 10
エラー: T:\sms\Development\research\c2\disttest\imread。 50 行目、6 列目の m
Octave インストールで「 max」を検索します。.oct または .m ファイルのいずれかになります。この場合、.oct ファイル max.oct です。これを配布ディレクトリにコピーします。
B「min」などの明白なものを検索しても、結果が得られない。これは、Loadable Function「min」が .oct ファイル「max.oct」にあるためです。max.oct のコピーを作成し、名前を min.oct に変更します。今すぐ機能します。関数がどこにあるかをどのように知ることができますか? わからない。それらのほとんどは、min の場合は「max.oct」、「ifft2.oct」の場合は「fft2.oct」など、わかりやすい場所にあります。頑張ってください。
実行可能ファイルが実行されるまで繰り返します。