Estoy intentando compilar un archivo ejecutable (archivo ELF) que no utiliza un cargador dinámico. Construí un compilador cruzado que compila mips de Linux para ser utilizado en un simulador que hice. Afirmé el flag -static-libgcc en la compilación de mi archivo hello.cpp (hello world programme). Aparentemente, esto no es suficiente sin embargo. Porque todavía hay un segmento en mi archivo ejecutable que contiene el nombre/ruta del cargador dinámico. ¿Qué banderas uso para generar un ejecutable que contiene TODO lo que se necesita ejecutar? ¿Debo reconstruir mi compilador cruzado?Compilar un archivo ejecutable estático independiente
Respuesta
Intente utilizar la bandera -static
?
Use las siguientes banderas para ligarse
-static -static-libgcc -static-libstdc++
Utilice estas tres banderas para enlazar con las versiones estáticas de todas las dependencias (gcc suponiendo). Tenga en cuenta que, en cierta situación, no necesariamente necesita las tres banderas, pero tampoco "duelen". Por lo tanto, solo enciende los tres.
Comprobar si efectivamente trabajadas
Asegúrese de que no hay realmente ninguna vinculación dinámica
ldd yourexecutable
debe devolver "no es un ejecutable dinámico" o algo equivalente.
Asegúrese de que no hay símbolos sin resolver dejaron
nm yourexecutable | grep " U "
La lista debe estar vacío o debe contener solamente algunos símbolos kernel-espaciales especiales como
U __tls_get_addr
Por último, compruebe si en realidad puede ejecutar su ejecutable
¡Esta debería ser la respuesta aceptada! –
- 1. Compilar a un ejecutable independiente (.exe) en Visual Studio
- 2. Cómo construir un ejecutable de scala independiente
- 3. Vinculación STL en un archivo ejecutable independiente Android NDK
- 4. Implementar la aplicación web como un ejecutable independiente
- 5. Cómo cargar un archivo ejecutable ELF ejecutable dinámicamente?
- 6. estático Compilar de hilo Ejemplo
- 7. Compilar para entorno independiente con GCC
- 8. Makefile que compila todos los archivos cpp en un directorio en un ejecutable independiente
- 9. arm-linux-androideabi-gcc no puede crear un archivo ejecutable - compilar ffmpeg para dispositivos android armeabi
- 10. ¿Cómo se puede compilar el proyecto C++/Cython en un ejecutable?
- 11. -fPIE ("ejecutable independiente de la posición) opción (gcc, ld)
- 12. Embalaje de un archivo en un archivo ejecutable ELF
- 13. Incluyendo un archivo XSLT en un archivo ejecutable
- 14. ¿La plataforma de archivos objeto es independiente?
- 15. Archivo ejecutable generado usando GCC bajo cygwin
- 16. compruebe si un archivo es ejecutable
- 17. Usando dlopen() en un archivo ejecutable
- 18. Generar un archivo ejecutable usando wix
- 19. ¿Se puede usar PyPy/RPython para producir un pequeño ejecutable independiente?
- 20. ¿Cómo crear un archivo ejecutable para una aplicación Qt?
- 21. ¿Cómo puedo crear un .exe de Windows (ejecutable independiente) usando Java/Eclipse?
- 22. Cómo crear un archivo .exe ejecutable desde el archivo .m
- 23. Redireccionamiento a un archivo estático en express.js
- 24. ¿Buscar un archivo estático durante Application_BeginRequest?
- 25. Enlace a un archivo estático de Hamlet
- 26. ¿Cómo determinar qué compilador se ha utilizado para compilar un ejecutable?
- 27. Archivo ejecutable Java de JAR
- 28. ¿Por qué compilar un archivo PHP?
- 29. Compilar un archivo binario para vincular OSX
- 30. ¿Cómo compilar solo un archivo en C#?
¿Hay una buena descripción de recursos ¿Cuál es el resultado exacto de cada uno de los indicadores de gcc? No estoy 100% seguro de si realmente estoy desactivando la carga dinámica o no. Cuando uso -estático todavía tengo el nombre de un cargador dinámico colocado en mi sección .interp del archivo elf. –
http://gcc.gnu.org/onlinedocs/gcc/Option-Index.html Solía escribir un sistema operativo que carga los archivos ejecutables de elf y puedo confirmar que el indicador estático funciona, simplemente ignore las cosas relacionadas con el ld y saltar directamente al punto de entrada del ejecutable – Tomaka17
He leído algo sobre el uso de alguna opción de configuración "-disable-shared". ¿No es necesario compilar un ejecutable independiente? –