Tratando de crear algo similar a SFX (instalador autoextraíble), estaba incluyendo los archivos de configuración en un exe usando un recurso personalizado en Visual C++. Cuando el tamaño de los archivos de configuración alcanzó más de ~ 900 MB, el vinculador no puede generar un exe con los recursos incrustados. Lo extraño es que el enlazador genera un exe sin advertencias. El exe generado es una aplicación MFC estáticamente vinculada (aplicación principal del exectuable). Sin embargo, no se incluye el recurso. He visto el tamaño del exe durante el enlace desde una consola. Mostraba 900 MB por un tiempo antes de caer al exe de 2MB al final. Si eliminé algunos de los archivos (digamos que el tamaño total será de 500MB), el exe se genera todo OK con todos los recursos incrustados. ¿Hay un límite de tamaño práctico para el recurso personalizado? Tenga en cuenta que el tamaño final del ejecutable es de aproximadamente 1 GB, que es mucho menos que la aplicación win32 de 2 GB puede abordar. Entonces, me pregunto si esto es un error o característica de vC++ 2010. Por cierto, también usé/expectedoutputsize truco. Pero no ayuda, excepto que la vinculación es mucho más rápida con un mayor tamaño de salida esperado.Win32 ¿Qué tan grande puede ser el recurso personalizado?
Respuesta
Según la PECOFF Specification, el tamaño de las entradas de datos de recursos es de 4 bytes (IMAGE_RESOURCE_DATA_ENTRY.Size - ver winnt.h)
el tamaño, en bytes, de los datos de recursos que se apuntado por el campo Data RVA.
Respuesta tardía. Puede ser útil para otros. Puede que no sea una respuesta a su pregunta, pero esta puede ser una solución a su problema. Verifique el 'instalador de Bitrock'. Esto también le da al instalador de autoextracción. Lo utilicé con éxito en muchos de mis proyectos para el despliegue.
He respondido una respuesta similar here.
Básicamente, añada el número binario + mágico (separador único) al final del ejecutable. En tiempo de ejecución, abra el ejecutable para leer, encuentre el desplazamiento a través de un número mágico u otro método y el resto del archivo sea su gran información.
- 1. ¿Qué tan grande puede ser un archivo mapeado en memoria?
- 2. ¿Qué tan grande debe ser una imagen UIBarButtonItem?
- 3. ¿Por qué es GHC tan grande/grande?
- 4. ¿Qué tan grande puede obtener una matriz de Python?
- 5. ¿Qué tan grande puede ser un entero de 64 bits con signo?
- 6. ¿Qué tan grande es la sesión Meteor
- 7. ¿Cómo puede Google ser tan rápido?
- 8. ¿Cómo puede NSArray ser tan lento?
- 9. ¿Por qué Haskell es tan grande?
- 10. ¿Qué tan grande es demasiado grande para XP/SCRUM?
- 11. ¿Qué tan grande es wchar_t con GCC?
- 12. Silverlight Install Base - ¿Qué tan grande es?
- 13. ¿Qué tan grande es demasiado grande para una tabla MySQL?
- 14. ¿Qué tan complejos deberían ser los modelos?
- 15. ¿Cómo se determina qué tan grande es el objeto Request.Form?
- 16. Necesito almacenar códigos postales en una base de datos. ¿Qué tan grande debe ser la columna?
- 17. ¿Por qué mi biblioteca estática es tan grande?
- 18. ¿Qué tan peligroso es e.preventDefault() ;, y puede ser reemplazado por el seguimiento de teclas/mousedown?
- 19. Parámetro thread_stack del servidor MySQL - ¿Qué es eso? ¿Qué tan grande debería ser? Hace un par de días
- 20. Win32 cuadro de mensaje personalizado
- 21. ¿Cuán grande puede ser una carga útil de tarea appengine?
- 22. ¿Qué tan grande es una referencia de objeto en .NET?
- 23. ¿Por qué es tan grande un diccionario .net genérico
- 24. Debería ser tan obvio, pero ¿por qué no funciona?
- 25. ¿Qué tan grande es una clase en la memoria?
- 26. ¿Qué tan grande es BIG? (equipo de desarrollo)
- 27. ¿Qué tan seguro puede ser un formulario de contacto HTML impulsado por PHP usando Swiftmailer?
- 28. ¿En qué caso puede ser exento de CSRF ser peligroso?
- 29. ¿Qué tan seguro es un redireccionamiento de encabezado? ¿Puede ser pasado por alto?
- 30. Qt :: ¿Qué tan pequeño se puede hacer?
Los recursos de Win32 no son una buena forma de incluir grandes cantidades de datos. Simplemente agréguelo a su archivo comenzando en un desplazamiento conocido (más grande que el ejecutable mismo), y use las funciones de lectura de archivos habituales para acceder a él. –
Otra opción sería incluir los datos de recursos sin procesar en un archivo de objetos y vincularlos en. En Linux/OS X, puede hacer esto con objcopy de GNU para convertir un archivo binario en un archivo de objeto, pero no estoy seguro de cómo harías eso en Win32 usando las herramientas de Microsoft. –
Sí, para datos enormes, agregar un binario al exe tiene más sentido. Sin embargo, todavía creo que es un error del enlazador en VC++ 2010. Si me vinculé con la compilación de depuración, el problema desapareció. Así que experimenté una opción de enlazador, parece usar el/INCREMENTAL = ¡sí el truco! – Zhichao