Pergunta

Eu estou trabalhando em escrever um kernel, e eu tenho alguns amigos trabalhando comigo no projeto. Temos vindo a utilizar DJGPP para compilar o projeto por um tempo, mas nós estamos tendo alguns problemas de compatibilidade de plataforma cruzada com a compilação deste modo que não deixaram o meu principal Partnet no projeto incapaz de compilar em Windows XP. (GCC de DJGPP está tendo problemas com listas de argumentos mais do que 127 no Windows XP, mas não ter problemas com as mesmas listas de argumentos sobre Vista. Assim, por uma vez, Vista funciona melhor do que XP em alguma coisa. O.o)

Anywho, em vez de tentar elaborar algum truque sujo para fazer a compilação danado com DJGPP, nós decidimos que queremos abandonar DJGPP inteiramente e trabalhar com uma versão diferente do GCC para Windows. O problema é que não MinGW (que eu saiba) não vamos usar sintaxe NASM para as porções de montagem do código, e que seria um pouco de dor para converter tudo para sintaxe AT & T neste momento. Possível, é claro, desde o seu bastante no início do projeto, mas uma dor.

Então agora você sabe o assunto. A minha pergunta é esta: Que compilador GCC distro para Windows nos permitirá mais facilmente porto este projecto para si? Idealmente, nós estamos procurando por algo que pode fazer NASM assembler sintaxe, não tem qualquer dependência de DLLs externel (este é um kernel aqui, não terá acesso a eles) e vai trabalhar consistentemente em várias versões no Windows. Quais são as suas recomendações sobre a melhor maneira de ir sobre como fazer isso, e qual versão do GCC para Windows que você recomendaria?

Note que, se estamos indo para necessidade de converter o projeto para a sintaxe AT & T, que está ok, eu só gostaria de não fazer isso. Na verdade, estamos usando NASM para montar os bits de montagem do mesmo, e que produz um arquivo .o válido, mas MinGW não é capaz de link que em por algum motivo. Eu acho que os bits de montagem em linha (talvez 5 linhas) já estão AT & T sintaxe, conforme exigido pelo GCC.

Obrigado!

Foi útil?

Solução

Você está provavelmente passando o tipo de objeto errado nasm com a opção -f.

Eu aposto que você está passando coff -f.

Você vai precisar passar win32 -f.

Outras dicas

Criar um cross-compilador.

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

Isto é o que eu fiz quando a transição de DJGPP para o desenvolvimento em um host Windows. Eu recomendo o método Cygwin, como é um pouco mais estável do que MSYS.

Uma vez que você tiver feito isso, configure NASM para construir elf32 arquivos objeto, e você está pronto para ir.

Você está usando NASM compilado para DOS ou Windows? Eu não olhei, mas é possível que haja uma diferença. Além disso, se o seu NASM é muito antiga, talvez não seja capaz de gerar algo MinGW pode entender.

Uma rápida pesquisa no Google encontrou um tutorial sobre a compilação x264 sob MinGW , onde uma das etapas é compilar NASM em MinGW.

Se isso falhar, você pode tentar (como sugerido em um comentário para outra resposta) usando objcopy.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top