Voy a comenzar un nuevo proyecto de C++ que se basará en una serie de bibliotecas, incluida parte de las bibliotecas de Boost, log4cxx o la biblioteca de registro de Google, y a medida que el proyecto evoluciona también otras (que aún no puedo) prever).Aplicación C++: ¿debo usar enlaces estáticos o dinámicos para las bibliotecas?
Tendrá que ejecutarse en sistemas de 32 y 64 bits, muy probablemente en un entorno Linux bastante diverso en el que no espero tener todas las bibliotecas necesarias ni privilegios.
Mi pregunta es, ¿debo compilar mi aplicación enlazando dinámicamente o estáticamente a todas estas bibliotecas?
Notas:
(1) Soy consciente de la vinculación estática podría ser un dolor durante el desarrollo (ya los tiempos de compilación, compilación cruzada para ambos 32 y 64 bits, bajando cadenas de dependencia para incluir todas las bibliotecas, etc.), pero es mucho más fácil durante la prueba: simplemente mueva el archivo y ejecútelo.
(2) Por otro lado, las uniones dinámicas son más fáciles durante la fase de desarrollo - tiempos de compilación cortos (realmente no sé cómo manejar enlaces dinámicos a bibliotecas de 64 bits desde mi entorno de 32 bits), sin problemas cadenas de dependencia. El despliegue de nuevas versiones, por otro lado, puede ser feo, especialmente cuando se requieren nuevas bibliotecas (consulte la condición anterior de no tener derechos en las máquinas de destino, ni estas bibliotecas disponibles).
(3) He leído las preguntas relacionadas con este tema pero no he podido averiguar qué enfoque se ajusta mejor a mi situación.
Conclusiones:
- Gracias a todos por su ayuda!
- que probablemente vaya con la vinculación estática porque:
- un despliegue más fácil
- rendimiento predecible y más consistentes resultados durante perf. prueba (mira este documento: http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- Como se señaló, el tamaño y la duración de la compilación de estática vs dinámico no parece ser una gran diferencia
- Ciclos de prueba más fáciles y rápidos
- Puedo mantener todos los dev. ciclo en mi dev. máquina
También lo hace más robusto después de la instalación. Si el usuario instala algo que cambia las bibliotecas dinámicas, su programa no se verá afectado. – Jay
Un problema aún muy válido con la vinculación estática (y también con las bibliotecas incluidas) es que las actualizaciones de seguridad necesarias a menudo se descuidan. – wich
No he visto mejoras notables en la velocidad con enlaces dinámicos en Linux. ir con estática: es más fácil y la memoria de su aplicación será más pequeña a menos que otro programa se ejecute al mismo tiempo con la misma dependencia (las bibliotecas dinámicas deben estar cargadas en su totalidad en la memoria, incluso si solo use 1 función). –