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


8

Como parte de mi investigación, escribo mucho código Python y MATLAB que nunca necesita ser distribuido a nadie más. Incluso si necesito distribuir mi software, Python y MATLAB, ambos interpretados, hacen que compartirlo sea relativamente simple.

Ahora estoy escribiendo algún software en C ++ que me gustaría distribuir. Tengo una idea de cómo compilar el software en mi propia máquina, pero lo que no entiendo es lo que hay que hacer para dar el software a otras personas.

Primero, más sobre mi proyecto: estoy escribiendo un código para calcular y visualizar visualizaciones. El proyecto está basado en gráficos, por lo que estoy usando la biblioteca de gráficos LEMON. Estoy explorando las implementaciones de VTK y OpenGL con el fin 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 ...).

Entonces, tomemos la biblioteca de gráficos LEMON como ejemplo. Es un montón 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 di que quiero darle mi software a alguien que se ejecute en Windows. Quiero que puedan descargar un instalador, hacer clic en uno o dos botones y tener todo listo. No quiero que se preocupen por instalar la biblioteca LEMON u OpenGL. No deberían tener que compilar nada a sabiendas. es 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 cualquiera que ejecute un sistema operativo Windows. ¿Pero qué pasa con las bibliotecas que uso? Supongo que necesito vincularlos estáticamente en Windows, y eso se encargará del problema de dependencia allí. Pero en el fondo de mi mente, he leído que enlazar estáticamente no es una buena práctica (¿o es 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 conoces alguna.


55
Tengo un consejo para ti: comienza a INTENTAR. Realmente compila algún paquete, ve a otra computadora e intenta ejecutarlo allí (usa los instaladores solo después de que sepas qué hacer). Enjuague, repita. Explore la configuración del compilador, evite usar bibliotecas de depuración para el lanzamiento, use el seguimiento de dependencias.
Deer Hunter

@DeerHunter Puedo apreciar el enfoque empírico, y ciertamente he pasado algunas horas experimentando y buscando. Dicho esto, me gustaría saber si incluso es posible empaquetar, por ejemplo, VTK, con mi software para que el usuario no tenga que instalarlo ni ninguna de sus dependencias. Cada proyecto que he visto que usa VTK le pide al usuario que lo instale como requisito previo. Quizás esa sea mi respuesta.
jme

jme, es posible si revisas la licencia y la licencia lo permite. Las dependencias agrupadas son compatibles con todos los marcos de instalación principales.
Deer Hunter

1
En Linux, se prefiere la vinculación dinámica, porque el software de administración de paquetes asegura que solo haya una copia de cada biblioteca en el sistema. Pero en Windows, simplemente enlace estáticamente, ya que no tiene un administrador de paquetes utilizable. Incluso en Linux, vincularía estáticamente cosas que no están en el repositorio de paquetes estándar, o en LSB para compatibilidad de distribución cruzada. Solo asegúrese de poder hacerlo (LGPL se detiene en el límite del enlace dinámico, por lo que no puede enlazar estáticamente, por ejemplo, Qt en una aplicación que no sea LGPL).
Jan Hudec

1
@JanHudec en Windows también puede simplemente vincular dinámicamente y poner todos los dlls usados ​​en el mismo directorio que el exe
stijn

Respuestas:


2

Mientras la licencia de las bibliotecas VTK lo permita, es posible que pueda escribir un script de instalador NSIS (que creará un instalador redistribuible) que instalará las bibliotecas VTK en modo silencioso. El modo silencioso (si el instalador VTK tiene esto) instalará las bibliotecas sin solicitar al usuario ninguna entrada; así es como funcionan la mayoría de los instaladores de videojuegos (el software requerido se instala sin solicitarle que acepte los términos de uso o dónde instalarlo) eso).

Sin embargo, solo instalar ciegamente 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 escrito (para un producto en el que trabajo) requiere que SQL Server 2005 esté instalado 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 NSIS) con el modificador / q. Esto instala el servidor SQL con la configuración predeterminada, y todo lo que el usuario ve es el mensaje "instalar SQL Server 2005" que se genera mientras el MSI hace su trabajo. Nos aseguramos de informar al usuario sobre esto y de darle la opción de instalar nuestro software sin él.

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.