Solución: Crear un EXE distribuibles utilizando mkoctfile y empaquetar este exe con los archivos principales de octava, y otra .oct y .m archivos según sea necesario.
Paso 1: Cree un ejecutable independiente.
Se puede ver el código que funciona aquí: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html
Particularmente el archivo "embedded.cc".
He simplificado ese archivo de la siguiente manera:
#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;
}
construir este archivo con el comando
mkoctfile --link-stand-alone embedded.cc -o embedded
Puede lanzar advertencias, pero siempre y cuando se lanza ningún error, que debe estar bien . El archivo embedded.exe se compilará y se puede ejecutar. El único problema es que carecerá de todas las cosas buenas que hacen que octava sea increíble. Tendrás que proporcionar esos.
Paso 2: Crear una carpeta de distribución
Usted tendrá que crear una copia de muchos de los archivos de octava. Sugiero un directorio específicamente para esto. Como mínimo, necesitará una copia de todas o la mayoría de las DLL en \ bin. Además, coloque su ejecutable distribuible en este directorio.
Paso 3: Otros archivos golpe-a-mole
Ahora tendrá que averiguar lo que serán necesarios otros archivos para ejecutar la secuencia de comandos .m. Puede simplificar este paso copiando \ oct \ i686-pc-mingw32 * .oct y \ share \ octave \ 3.2.4 \ m \ * \ *. M en el directorio de distribución, aunque esto será excesivo, y en realidad no lo hará prevenir el paso de golpear a un topo.
Ahora, debes jugar whack-a-mole o la tradición consagrada de "donde mi incluye estar en, yo?"
- Abra una línea de cmd y navegue a la carpeta de distribución.
- deshacerse de cualquier cadena camino útil. Sus clientes no tendrán ellos.
intenta ejecutar el programa de embedded.exe. usted obtiene un error como el siguiente:..
embedded.exe
error: `max' undefined near line 83 column 22
error: evaluating argument list element number 1
error: evaluating argument list element number 1
error: called from:
error: T:\sms\Development\research\c2\disttest\strcat.m at line 83, column 3
error: T:\sms\Development\research\c2\disttest\file_in_path.m at line 5, column 10
error: T:\sms\Development\research\c2\disttest\imread.m at line 50, column 6
un Buscar en la instalación de Octave para "max" va a ser un .oct o un archivo .m en este caso, es a .o archivo ct, max.oct. Cópialo en tu directorio de distribución.
B Busca algo obvio como "min" y no obtiene ningún resultado. Esto se debe a que la función cargable "min" está en el archivo .oct "max.oct". Haga una copia de max.oct y cambie el nombre a min.oct. Funcionará ahora. ¿Cómo sabes dónde están las funciones? No estoy seguro. La mayoría de ellos se encuentran en lugares obvios como "max.oct" para min, y "fft2.oct" para "ifft2.oct". Buena suerte con todo eso.
Repita hasta que se ejecute su ejecutable.
Está bien para responder a su propia pregunta, pero podría ser mejor para editar su pregunta, quitar la parte "solución", y que lo ponga por separado más adelante como una respuesta . De esa forma, si otras personas responden con sus propias respuestas, pueden competir en pie de igualdad, con la mejor respuesta flotando hasta la cima del orden de clasificación. –
¿Estaría bien hacerlo ahora? No conozco la etiqueta aquí. Siempre he encontrado que este sitio es tan útil ... Quería ayudar al siguiente tipo. – Noah
Sí, deberías hacer eso. – Radu