En mi aplicación tengo 3 partes principales:Vinculación: estático vs dinámico
- Exe: un archivo ejecutable
- Lib_A: una biblioteca contiene una clase Singleton y una clase base para algunos cálculos a su uso en Singleton clase
- Lib_B: una biblioteca contiene una serie de clases derivadas de la base en Lib_A
la razón por la que tengo las clases derivadas en Lib_B es, me gustaría compilar el Lib_B en tiempo de ejecución desde Exe. Necesito generar clases derivadas durante los cálculos sin terminar todo el sistema. Esto es muy importante para mi Eso significa que inicialmente puedo decir que Lib_B1 se cargó dinámicamente, también puedo compilar otras versiones de Lib_B como Lib_B2, Lib_B3, Lib_B4, etc. y cargarlas dinámicamente también. Todas las bibliotecas Lib_Bx tendrán funciones de punto de entrada para exportar las clases en ellas.
por lo que tomar los siguientes hechos en cuenta:
- En tiempo de ejecución, habrá varias número de archivos que comparten el mismo Lib_A.
- La aplicación debe ejecutarse en Windows y Linux. Entonces la multiplataforma parcial es un problema.
- voy a utilizar algunas librerías como TBB, Boost, Qt que puede tener sus propias bibliotecas como tbb.dll etc.
¿Cuáles son los pros y los contras de la vinculación estática o dinámica de Lib_A tanto contra Exe y Lib_Bx's? ¿Cómo se puede ver afectado el rendimiento, el tamaño del sistema, etc.? ¿Hay alguna situación peligrosa o difícil que pueda encontrar además de que para cada sistema operativo necesito usar el mismo compilador para Exe, Lib_A y Lib_Bx?
El diseño de todo el sistema es un problema muy difícil para mí, por lo que cualquier comentario será apreciado.
Muchas gracias.
Bueno, quiero usar el compilador MSVC++ en Windows y el compilador Intel C++ en Linux. Creo que ambos generan un código mejor optimizado que el de GCC. La aplicación es solo para uso de la mía. No estoy dispuesto a venderlo. –
@sad_man: ¿Y planea obtener derechos de redistribución para VC e ICC? Buena suerte con eso. – ephemient
@ephermient: No distribuyo mi aplicación por ahora. Pero si lo vendo en el futuro, obviamente el cliente proporcionará su propia copia del compilador. Sé que no suena bien, pero este es un truco para obtener la velocidad del código binario compilado. Por ahora estoy de acuerdo con VC e ICC. En el peor de los casos, puedo distribuir la aplicación con GCC ¿verdad? :) –