Решение: создайте распространяемый exe-файл, используя mkoctfile, и запакуйте этот 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.Я предлагаю каталог специально для этого.Как минимум, вам понадобится копия всех или большинства библиотек DLL в \ bin.Кроме того, поместите свой распространяемый исполняемый файл в этот каталог.
Шаг 3: Другие файлы whack-a-mole
Теперь вам необходимо выяснить, какие другие файлы будутнеобходимо запустить ваш .m скрипт.Вы можете упростить этот шаг, скопировав \ oct \ i686-pc-mingw32 * .oct и \ share \ octave \ 3.2.4 \ m \ * \ *. M в каталог дистрибутива, хотя это будет излишним и фактически не будетпредотвратите шаг «удар-моль».
Теперь вы должны сыграть «удар-моль» или проверенную временем традицию «где могут быть мои, йо?»
- Откройте командную строку и перейдите в папку вашего дистрибутива.
- Избавьтесь от любых полезных строк PATH.Ваши клиенты их не получат.
Попытка запустить программу embedded.exe.Вы получите сообщение об ошибке, например следующее:
embedded.exe
ошибка: `max 'не определено в столбце 83 строки 22 * 1044 * ошибка: оценка элемента списка аргументов номер 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.m в строке 50, столбец 6
A Найдите в вашей установке Octave значение "max".Это будет файл .oct или .m.В данном случае это файл .oct, max.oct.Скопируйте его в каталог дистрибутива.
B Вы ищете что-то очевидное, например, "min", и не получаете результатов.Это связано с тем, что загружаемая функция "min" находится в файле .oct "max.oct".Сделайте копию max.oct и переименуйте ее в min.oct.Это будет работать сейчас.Как вы знаете, где функции?Я не уверен.Большинство из них находятся в очевидных местах, таких как «max.oct» для min и «fft2.oct» для «ifft2.oct».Удачи со всем этим.
Повторяйте, пока ваш исполняемый файл не запустится.