Me pregunto cómo "empaquetar" un proyecto de C++ para su lanzamiento. Utiliza varias bibliotecas, y no quiero que un usuario tenga que pasar por la misma configuración que yo, con poner los archivos correctos en el lugar correcto y tal. Tuve dificultad para investigar esto, porque no estoy seguro del término técnico para este tema. Si estoy usando compilación de línea de comandos en Linux, ¿hay alguna manera fácil de hacerlo?Cómo empaquetar C++ con DLL y bibliotecas
Respuesta
Su enfoque a esto diferirá en Windows y Linux porque cada SO maneja esto de una manera diferente. Estoy más familiarizado con Linux, así que limitaré mi respuesta al lado de Linux.
Cuando vincula su ejecutable con una biblioteca utilizando -l indicador, el vinculador se predetermina a buscar en los directorios normales de la biblioteca del sistema por lo que hay cuatro enfoques aquí.
Exigen que el usuario instale correctamente las bibliotecas. Sin embargo, parece que no quieres hacer eso.
Haga que el usuario agregue la ubicación de la biblioteca a la variable LD_LIBRARY_PATH.
Su tercera opción es obligar al vinculador a mirar en una ruta determinada para las bibliotecas que utilizan el indicador -rpath. Por ejemplo, para que la aplicación busque en su directorio de trabajo una biblioteca compartida que puede compilar con:
g++ -rpath ./ -l SomeLib -o MyApp myapp.cpp
Otra opción es vincular estáticamente su código con su biblioteca de esa manera solo tiene que distribuir un ejecutable. Si existe una biblioteca estática, puede usar
g++ -static -l SomeLib -o MyApp myapp.cpp
para indicarle a gcc que enlace estáticamente.
¿Por qué no vincularlos todos estáticamente? – vidit
@vidit Supongo que incluir enlaces estáticos sería una buena idea. Edito mi publicación. Gracias por recordarme. –
Los enlaces estáticos no siempre funcionan, p. cuando está usando librerías GPL pero no quiere licenciar su programa bajo GPL. – Cubic
¿Se refiere a un instalador?
En Windows, ¿el programa que ejecuta para instalar una nueva aplicación que excluye todo en el directorio correcto, crea el menú de inicio y le permite desinstalarlo?
Hay un constructor de instalador en Visual Studio (puede que no esté en la versión gratuita) que crea archivos de instalador .msi. Es bastante fácil de usar para tareas simples, pero se vuelve complicado hacer algo más.
Como alternativa, para crear el tipo tradicional setup.exe instala uso el libre excelente Innosetup
En Linux usted generalmente crear un paquete con el formato que usa su distribución (.deb/.rpm). Hay muchas instrucciones sobre los detalles de cada uno y las herramientas para hacerlo probablemente ya estén instaladas en su sistema Linux
En las ventanas que no recomiendo Wix http://wix.sourceforge.net/ para crear el instalador .msi me gustaría señalar, la ruta de búsqueda de archivos .dll que recomiendo poner todos .dll en la misma carpeta que el archivo .exe ya que este tiene la mayor prioridad
Sin embargo, el CRT vc (la/C++ biblioteca de tiempo de ejecución C) debe ser instalado usando el paquete de redistribución de Microsoft -> actualiza automáticamente http://www.microsoft.com/de-de/download/details.aspx?id=5555
Wix puede incluir el paquete de redistribución en el mismo .msi por lo tanto, solo tiene que implementar un solo archivo instalador
- 1. Empaquetar bibliotecas compartidas en el duende
- 2. Cómo empaquetar y consumir una biblioteca Java existente con OSGI
- 3. Bibliotecas estáticas, bibliotecas dinámicas, DLL, puntos de entrada, encabezados ... ¿cómo salir de esto con vida?
- 4. ¿Cómo/dónde envío bibliotecas de terceros con una DLL .NET?
- 5. Cómo empaquetar un demonio Python con setuptools
- 6. Cómo empaquetar el programa Twisted con py2exe?
- 7. ¿Cómo descomprimir y empaquetar el archivo pkg?
- 8. Dll Importe C++ a C# con matrices
- 9. C++ Dll en Dependency walker muestra IESHIMS.dll y MSVCR110.dll
- 10. Cómo organizar, probar, documentar y empaquetar un proyecto de Clojure
- 11. lanzamiento SAFEARRAY de C++ y C# DLL
- 12. Empaquetar y ejecutar una aplicación Java con dependencias de primavera
- 13. Cómo empaquetar archivos de datos con autoconf y automake de GNU
- 14. Crear bibliotecas estáticas y compartidas de C++
- 15. Crear bibliotecas de programas en Windows y LINUX [C++]
- 16. C++ Cómo compilar dll en .exe
- 17. ¿Compila un programa C++ con solo dependencia de kernel32.dll y user32.dll?
- 18. ¿Cómo enlazar estáticamente las bibliotecas para una C ClassLibrary?
- 19. Cómo empaquetar una aplicación Gtk2Hs Haskell claro en las ventanas?
- 20. Importar una DLL con C++ (Win32)
- 21. Extensión de C++ Ruby con bibliotecas externas
- 22. C++ ¿Bibliotecas similares a C#?
- 23. fiable y simple UDP bibliotecas de C++
- 24. Bibliotecas dinámicas de plataforma cruzada C++; Linux y Windows
- 25. ¿Cómo uso scipy.weave.inline junto con bibliotecas de C externas?
- 26. .lib y .dll Compatibilidad con versiones anteriores
- 27. comenzar con BouncyCastle criptografía DLL C#
- 28. Dependencias Maven2 y Bibliotecas Nativas
- 29. beneficio de firmar dll con nombre seguro
- 30. C++ DLL no se descarga con AppDomain
¿Está compilando DLL en Linux? – Attila
Lo siento, soy estúpido, estoy haciendo desarrollo en Linux y Windows en este momento, y tuve que hacer muchas configuraciones para mis bibliotecas en ambos; Soy un principiante y probablemente estoy mezclando los dos. Tengo que enlazar en bibliotecas, lo que hice en Windows con dlls (al menos creo que eso es lo que estaba pasando allí). Estoy editando la pregunta para decir solo bibliotecas, porque no conozco las diferencias técnicas correctas entre las cosas. – akroy
Hay dos versiones de bibliotecas: estática y dinámica. Las bibliotecas estáticas están vinculadas directamente con el ejecutable, por lo que no debe preocuparse por colocarlas en ningún lugar (el código es parte del ejecutable). Con las bibliotecas dinámicas, deberá asegurarse de que el tiempo de ejecución pueda encontrarlas: deberá ubicarlas en una ruta común o configurar la ruta buscada para que las bibliotecas incluyan el directorio en el que se encuentran. Lea estos [dos] (http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html) [artículos] (http://www.eyrie.org/~eagle/notes/rpath.html) para más información. – Attila