En mi proyecto ARM, utilizo lo siguiente para construir el binario de la aplicación sin sistema operativo:
arm-linux-gcc -Os -ffunction-sections -fdata-sections -o boot.o boot.S
arm-linux-gcc -Os -ffunction-sections -fdata-sections -o main.o main.c
arm-linux-ld -T link.lds --gc-sections -o target.bin boot.o main.o
Esto funciona bien. Porque si elimino las opciones "-ffunction-secciones", "-fdata-secciones" y "--gc-secciones", el tamaño del archivo target.bin aumentará casi el doble.
Pero en la plataforma x86, el mismo método, encontré que: Si no uso esas opciones de gcc e ld, la salida es normal, pero el archivo de salida será de 0 bytes si uso esas opciones como plataforma de brazo.
Respuestas
2 para la respuesta № 1-Os -ffunction-sections -fdata-sections
y --gc-sections
debería funcionar en el sistema x86. ¿Estás seguro de que tu programa y tu script de enlazador son adecuados para x86? Como su programa está diseñado para ARM sin formato, es probable que no tenga puntos de entrada para su sistema operativo x86, y si no hay un punto de entrada, todo es basura --gc-sections
opción.
Por cierto, su "pregunta" en realidad no incluye ninguna pregunta.