Me tocó este problema hace dos años cuando implementé por primera vez nuestras fijaciones SWIG. Tan pronto como expusimos una gran cantidad de código, llegamos al punto en que SWIG generaría archivos C++ tan grandes que el compilador no podría manejarlos. La única forma de evitar el problema era dividir las interfaces en múltiples módulos y compilarlos por separado.¿Es posible dividir un módulo SWIG para compilación, pero volver a unirlo cuando se vincula?
Esto tiene varias desventajas:
• Cada módulo debe saber acerca de las dependencias en otros módulos. Tengo un script para generar los archivos de interfaz que maneja este lado de las cosas, pero agrega complejidad adicional.
• Cada módulo adicional aumenta el tiempo que el enlazador dinámico necesita para cargar el código. He agregado un archivo init .py que importa todos los submódulos, por lo que el hecho de que el código esté dividido es transparente para el usuario, pero lo que siempre está visible son los tiempos de carga larga.
Actualmente estoy revisando nuestros scripts de compilación/proceso de compilación y quería ver si podía encontrar una solución a este problema que fuera mejor que la que tengo ahora. Idealmente, tendría una biblioteca compartida que contiene todo el código del contenedor.
¿Alguien sabe cómo puedo lograr esto con SWIG? He visto un código personalizado escrito en Ruby para un proyecto específico, donde la salida se procesa posteriormente para que esto sea posible, pero cuando analicé la viabilidad de los contenedores de Python, no parece tan fácil.
Creo que se ha perdido un poco el punto: no tengo problemas para pasar cosas de un módulo a otro, eso funciona bien, importa la declaración de "importación". El problema es que quiero vincular varios módulos en una biblioteca compartida para acelerar los tiempos de carga al importar el código. – jkp
Ah, perdón por eso, no hay solución para acelerarlo. Con Tcl, pudimos retrasar la carga de los módulos hasta que se necesitaron utilizando el mecanismo del paquete. Esto ayudó a acelerar las cosas, pero en cuanto a simplemente acelerar la carga, no hay dados. –