Domanda

Sto lavorando alla scrittura di un kernel e ho alcuni amici che lavorano con me nel progetto. Abbiamo usato DJGPP per compilare il progetto per un po ', ma stiamo avendo alcuni problemi di compatibilità multipiattaforma con la compilazione in questo modo che hanno lasciato la mia Partnet principale sul progetto incapace di compilare su Windows XP. (GCC di DJGPP ha problemi con elenchi di argomenti più lunghi di 127 su Windows XP, ma non ha problemi con gli stessi elenchi di argomenti su Vista. Quindi, per una volta, Vista funziona meglio di XP in qualcosa. O.O)

Comunque, piuttosto che provare a elaborare qualche hack sporco per far compilare la maledetta cosa con DJGPP, abbiamo deciso che vogliamo abbandonare completamente DJGPP e lavorare con una versione diversa di GCC per Windows. Il problema è che MinGW (per quanto ne sappia) non ci consente di usare la sintassi NASM per le parti di assemblaggio del codice, e a questo punto sarebbe un po 'complicato convertirlo tutto in sintassi AT & amp; T. Possibile ovviamente, dato che è abbastanza presto nel progetto, ma è un dolore.

Quindi ora conosci il problema. La mia domanda è questa: quale distro di compilatore GCC per Windows ci consentirà di portare più facilmente questo progetto su se stesso? Idealmente, stiamo cercando qualcosa che possa fare la sintassi dell'assemblatore NASM, non fare affidamento su dll esterne (questo è un kernel qui, non avrà accesso ad essi) e funzionerà costantemente su più versioni su Windows. Quali sono i tuoi consigli sul modo migliore per farlo e quale versione di GCC per Windows mi consigliate?

Nota che se avremo bisogno di convertire il progetto in sintassi AT & T va bene, mi piacerebbe proprio non farlo. Stiamo effettivamente utilizzando NASM per assemblare i bit di assemblaggio di esso, e questo produce un file .o valido, ma MinGW non è in grado di collegarlo per qualche motivo. Penso che i bit di assembly inline (forse 5 righe) siano già sintassi AT & amp; T, come richiesto da GCC.

Grazie!

È stato utile?

Soluzione

Probabilmente stai passando il tipo di oggetto sbagliato a nasm con l'opzione -f.

Scommetto che stai passando -f coff.

Dovrai passare -f win32.

Altri suggerimenti

Crea un cross-compilatore.

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

Questo è quello che ho fatto durante la transizione da DJGPP per lo sviluppo su un host Windows. Consiglio il metodo Cygwin, poiché è leggermente più stabile di MSYS.

Dopo averlo fatto, configura NASM per creare file oggetto elf32 e sei pronto per andare.

Stai usando NASM compilato per DOS o per Windows? Non ho guardato, ma è possibile che ci sia una differenza. Inoltre, se il NASM è troppo vecchio, potrebbe non essere in grado di generare qualcosa che MinGW può capire.

Una rapida ricerca su Google ha trovato un sulla compilazione di x264 sotto MinGW , dove uno dei passaggi è compilare NASM su MinGW.

In caso contrario, puoi provare (come suggerito in un commento a un'altra risposta) utilizzando objcopy.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top