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.
Respuestas:
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.
fuente