Pregunta

Estoy trabajando en escribir un kernel, y tengo algunos amigos que trabajan conmigo en el proyecto. Hemos estado utilizando DJGPP para compilar el proyecto por un tiempo, pero estamos teniendo algunos problemas de compatibilidad entre plataformas al compilar de esta manera que han dejado a mi Partnet principal en el proyecto sin poder compilar en Windows XP. (El GCC de DJGPP tiene problemas con las listas de argumentos de más de 127 en Windows XP, pero no tiene problemas con las mismas listas de argumentos en Vista. Así que, por una vez, Vista funciona mejor que XP en algo. O.O)

De cualquier forma, en lugar de intentar resolver un problema sucio para hacer que la maldita cosa se compile con DJGPP, hemos decidido que queremos deshacernos de DJGPP por completo y trabajar con una versión diferente de GCC para Windows. El problema es que MinGW (que yo sepa) no nos permite usar la sintaxis NASM para las partes de ensamblaje del código, y sería un poco difícil convertirlo todo a la sintaxis AT & amp; T en este punto. Por supuesto, es posible, ya que es bastante temprano en el proyecto, pero es un dolor.

Así que ya sabes el problema. Mi pregunta es la siguiente: ¿Qué distribución de compilador de GCC para Windows nos permitirá portar este proyecto más fácilmente a sí mismo? Lo ideal es que estemos buscando algo que pueda hacer la sintaxis del ensamblador NASM, no tengamos confianza en los archivos DLL externos (este es un kernel aquí, no tendrá acceso a ellos) y funcionará constantemente en varias versiones en Windows. ¿Cuáles son sus recomendaciones sobre la mejor forma de hacerlo y qué versión de GCC para Windows recomienda?

Tenga en cuenta que si vamos a necesitar convertir el proyecto a la sintaxis AT & amp; T, está bien, me gustaría no hacerlo. En realidad estamos usando NASM para ensamblar los bits de ensamblaje, y eso produce un archivo .o válido, pero MinGW no puede vincularlo por alguna razón. Creo que los bits de ensamblaje en línea (quizás 5 líneas) ya son sintaxis AT & amp; T, como lo requiere GCC.

¡Gracias!

¿Fue útil?

Solución

Probablemente estés pasando el tipo de objeto incorrecto a nasm con la opción -f.

Apuesto a que estás pasando -f coff.

Necesitará pasar -f win32.

Otros consejos

Construye un compilador cruzado.

http://wiki.osdev.org/GCC_Cross-Compiler

Esto es lo que hice cuando hice la transición de DJGPP para el desarrollo en un host de Windows. Recomiendo el método Cygwin, ya que es un poco más estable que MSYS.

Una vez que hayas hecho eso, configura NASM para crear archivos de objeto elf32 , y listo.

¿Está utilizando NASM compilado para DOS o para Windows? No miré, pero es posible que haya una diferencia. Además, si su NASM es demasiado antiguo, es posible que no pueda generar algo que MinGW pueda entender.

Una rápida búsqueda en Google encontró un tutorial sobre cómo compilar x264 en MinGW , donde uno de los pasos es compilar NASM en MinGW.

Si falla, puede intentar (como se sugiere en un comentario para otra respuesta) utilizando objcopy.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top