Pregunta ¿Hay un equivalente de Linux de los "archivos de recursos" de Windows?


Tengo una biblioteca C, que construyo como un objeto compartido para Linux y una DLL para Windows con MinGW32. La API depende de un par de archivos de datos (modelos estadísticos) que me gustaría incluir con SO / DLL para que la implementación sea solo un archivo.

Parece que puedo lograr esto para Windows con un "archivo de recursos" compilado con windres, pero luego tengo que escribir un montón de código de manejo de recursos para Windows, y todavía estoy atascado con los archivos en Linux.

¿Hay alguna manera de lograr la misma funcionalidad en Linux?

Aún mejor, ¿hay una solución portátil?


32
2018-01-04 02:03


origen


Respuestas:


En realidad es bastante simple en Linux y otros sistemas ELF: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967

OS X tiene paquetes, por lo que acaba de construir su biblioteca como un marco y poner el archivo en el paquete.


29
2018-01-04 03:23



Dos posibles soluciones:

  • Phong Vo's sfio biblioteca, que es parte del conjunto de herramientas de tecnología avanzada de software de AT & T, es un reemplazo maravilloso para C stdio.h, y le permitirá abrir archivos o bloques de memoria con una sola API. De modo que puede convertir fácilmente sus archivos existentes en datos inicializados en C para incluirlos en su archivo DLL o SO.

    Esta es una buena solución multiplataforma, pero la pena es que la curva de aprendizaje para comenzar es bastante alta. No hacen que sea fácil averiguar cómo funcionan las cosas o tomar una parte de su conjunto de herramientas y dividirlo para usarlo independientemente de las otras partes. Pero la buena noticia es que si desea adoptar su sistema U / Win para ejecutar códigos Unix en Windows (todos ellos parte del mismo conjunto de herramientas), puede crear archivos DLL y SO utilizando el mismo sistema.

  • Para este tipo de problema a menudo recurro a Lua; Puedo almacenar datos de Lua en archivos externos o dentro de C como datos inicializados. Esto es ideal para distribuir todo en un archivo .so; Hago esto para mis estudiantes.

    Nuevamente, la desventaja es que debes dominar e incorporar una nueva tecnología.

En mi propio trabajo, utilizo Lua sobre las cosas de AT & T por estos motivos:

  • Lua tiene un mucho huella más pequeña y está diseñado para jugar bien con los demás; con AST realmente tienes que adoptar su forma de hacer las cosas.

  • La curva de aprendizaje con Lua es mucho menos pronunciada; puedes ser productivo muy rápido.

  • Lua es extremadamente fácil de instalar y es fácil obtener información al respecto. AST tiene su peculiar proceso de instalación compartido por nadie más en el mundo; a menudo es difícil hacer que la instalación funcione; y es más difícil obtener información al respecto.

  • Usar Lua tiene muchos otros beneficios, por lo que el esfuerzo dedicado al aprendizaje de Lua y al aprendizaje de cómo incorporar Lua en los códigos C es fácil de amortizar en múltiples proyectos.


0
2018-01-04 03:02