¿Cómo distribuyo mi software científico con la menor cantidad de dependencias posible?

8

Como parte de mi investigación, escribo muchos códigos Python y MATLAB que nunca deben distribuirse a nadie más. Incluso si necesito distribuir mi software, Python y MATLAB, ambos interpretados, hacen que compartirlo sea relativamente simple.

Ahora estoy escribiendo un software en C ++ que me gustaría distribuir. Tengo una idea de cómo compilar el software en mi propia máquina, pero no entiendo qué es lo que se necesita hacer para proporcionar el software a otras personas.

Primero, más sobre mi proyecto: estoy escribiendo un código para calcular y mostrar visualizaciones. El proyecto está basado en gráficos, por lo que estoy usando la biblioteca de gráficos LEMON. Estoy explorando implementaciones VTK y OpenGL con el propósito de mostrar la visualización. Me gustaría escribir enlaces de Python y MATLAB para que los usuarios de esos entornos puedan usar mi software, y me gustaría producir versiones de Windows y Linux (aún no he pensado en OS X ...). / p>

Entonces, tomemos como ejemplo la biblioteca de gráficos LEMON. Es un grupo de encabezados junto con un pequeño objeto compartido. En mi sistema de desarrollo, compilo la biblioteca con CMake y la vinculo con mi proyecto.

Ahora diga que quiero darle mi software a alguien que esté ejecutando Windows. Quiero que puedan descargar un instalador, hacer clic en uno o dos botones y que se encarguen de todo. No quiero que se preocupen por instalar la biblioteca de LEMON o OpenGL. No deberían tener que compilar nada a sabiendas. ¿Es esto posible?

Tengo la sensación de que sí, pero me quedo corto cuando busco referencias. Tengo una vaga idea de que si compilo un binario en Windows debería poder distribuir ese binario a cualquier persona que ejecute un sistema operativo Windows. Pero ¿qué pasa con las bibliotecas que utilizo? Supongo que necesito vincularlos de forma estática en Windows, y eso resolverá el problema de la dependencia allí. Pero en el fondo de mi mente, he leído que la vinculación estática no es una buena práctica (¿o es esto solo en Linux?)

Como puedes ver, estoy algo perdido. Apreciaría un empujón en la dirección correcta, y algunas referencias para leer si sabe de alguna.

    
pregunta jme 22.08.2013 - 05:58

1 respuesta

2

Mientras la licencia de las bibliotecas VTK lo permita, es posible que pueda escribir un secuencia de comandos del instalador de NSIS (que cree un instalador redistribuible) que instalará las bibliotecas VTK en modo silencioso. El modo silencioso (si el instalador de VTK tiene esto) instalará las bibliotecas sin pedirle al usuario ninguna entrada. Así es como funciona la mayoría de los instaladores de videojuegos (el software requerido se instala sin pedirle que acepte los términos de uso o dónde se instala. it).

Sin embargo, solo la instalación a ciegas de software adicional podría dejarlo en una posición legal precaria. No estoy completamente seguro de su legalidad, pero supongo que debe informar al usuario de todo el software adicional que está a punto de instalar en su máquina.

Como ejemplo, uno de los instaladores que he creado (para un producto en el que trabajo) requiere que se instale SQL Server 2005 junto con el binario. En el script de instalación, si la máquina del usuario no tiene instalada la versión requerida del servidor SQL (o posterior), llama al archivo MSI para SQL Server 2005 (empaquetado dentro del instalador de NSIS) con el interruptor / q. Esto instala el servidor SQL con la configuración predeterminada, y todo lo que el usuario ve es el mensaje de "instalación del servidor SQL 2005" que se activa mientras el MSI funciona. Nos esforzamos por informar al usuario sobre esto y darles la opción de instalar nuestro software sin él.

Es posible que pueda crear una marca que compile todas sus bibliotecas por usted, luego llame al generador de scripts NSIS, pero no estoy seguro. No he buscado tan lejos en el agujero de conejo para NSIS, ya que no estamos automatizando las compilaciones del instalador.

Por supuesto, puede reemplazar NSIS con cualquier otro entorno de scripts del instalador. Solo lo he usado aquí como ejemplo, porque tengo poca experiencia con él.

    
respondido por el Jamie Taylor 23.09.2013 - 12:56

Lea otras preguntas en las etiquetas