underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« : Agosto 19, 2009, 11:07:24 » |
|
ld: Relocatable linking with relocations from format elf32-i386 (start.o) to format elf64-x86-64 (../x86.o) is not supported
|
|
|
|
|
Registrado
|
|
|
|
|
|
|
gnomo
|
 |
« Responder #2 : Agosto 20, 2009, 12:00:17 » |
|
ld: Relocatable linking with relocations from format elf32-i386 (start.o) to format elf64-x86-64 (../x86.o) is not supported
o LD ta tentando ligar objetos de 32 e 64 bits, e isso não é suportado pelo linker...
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #3 : Agosto 20, 2009, 12:13:53 » |
|
Olá gnomo, Sei que é de mal gosto postar duvidas sem explica-las, a questão é que apenas queria ter certeza de que não estava ficando louco... Sei que recebo esse erro quando tento compilar sources a partir de um sistema de 64bits, sei disso desde que migrei para essa plataforma, e no inicio tentei corrigir (para compilar outros núcleos), busquei nos manuais do ld, gcc, make, na internet e etc, acabei por fim configurando uma VM de 32bits que uso para compilar essas cousas. Tenho varias vm's aqui, duas delas com o debian lenny i386, em uma delas coloquei o XFCE para testar, a outra uso em modo texto mesmo, e ambas possuem os mesmos pacotes de desenvolvimento; a saída de uname -r de ambas é a seguinte: # uname -r 2.6.26-2-686
Há vários dias tento compilar os sources do sombra com a VM de 32bits que possui o XFCE instalado, e esta também remete esse erro, então devo concluir que o erro vem do XFCE, pois a outra VM que uso em modo texto compila legal... Farei mais testes, talvez tenha esquecido de algo... Obrigado
|
|
|
|
|
Registrado
|
|
|
|
|
Mounter
|
 |
« Responder #4 : Agosto 20, 2009, 01:16:12 » |
|
Edite o arquivo /src/common.mk e adicione nas CFLAGS, a flag -m32 e então o GCC deverá gerar binários de 32 bits. Provavelmente deverá editar alguns arquivos Makefile para adicionar a flag ao LD...
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #5 : Agosto 20, 2009, 01:31:04 » |
|
Estou com dificuldades de editar os makefiles, mais pretendo não desistir... Enquanto o erro anterior, estava realmente ficando louco... não tem qualquer cousa haver com o XFCE, acabei de compilar certinho nele. Na VM em modo texto eu havia baixado o source direto da net com wget, e na VM com XFCE, eu puxei os sources do meu host de 64bits, e quando usei o make, este deve ter alterado algo que gerou esse erro, quando baixei o src da net, compilou certinho... Desculpem os transtornos, prometo ser mais cuidadoso antes de postas mensagens... 
|
|
|
|
|
Registrado
|
|
|
|
|
Mounter
|
 |
« Responder #6 : Agosto 20, 2009, 01:36:11 » |
|
Transtorno algum, estamos justamente aqui para ajudar! Se tiver qualquer outra dúvida é só perguntar.
Abraços
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #7 : Agosto 20, 2009, 01:42:23 » |
|
editei o 'common.mk': # Parametros usados nos programas
CFLAGS = -m32 -Wall -nostdinc -nostdlib -fno-exceptions -fno-builtin -I$(INCDIR) $(ECFLAGS)
NASMFLAGS = -felf -I$(INCDIR)/ E obtive a seguinte saida: # make CC=gcc LD=ld AR=ar Compilando Kernel make[1]: Entrando no diretório `/home/bruce/kernel/sombrax2/src/arch' Compilando para arquitetura x86 make[2]: Entrando no diretório `/home/bruce/kernel/sombrax2/src/arch/x86' Compilando arquivo start.S Compilando arquivo mem.S Compilando arquivo isr.S Compilando arquivo switch_to.S Compilando arquivo memory/functions.S Compilando arquivo v86/vm86_init.S Compilando arquivo isr_handle.c Compilando arquivo interrupts.c Compilando arquivo debug.c Compilando arquivo elf.c Compilando arquivo coff.c Compilando arquivo pci.c Compilando arquivo syscall.c Compilando arquivo memory/page.c Compilando arquivo memory/frames.c Compilando arquivo v86/vm86.c Compilando arquivo v86/vm86_int.c Compilando arquivo v86/vm86_fault.c Compilando arquivo v86/vm86_mem.c Compilando arquivo v86/dos/dos_int.c ld: Relocatable linking with relocations from format elf32-i386 (start.o) to format elf64-x86-64 (../x86.o) is not supported make[2]: ** [x86.o] Erro 1 make[2]: Saindo do diretório `/home/bruce/kernel/sombrax2/src/arch/x86' make[1]: ** [x86.o] Erro 2 make[1]: Saindo do diretório `/home/bruce/kernel/sombrax2/src/arch' make: ** [arch] Erro 2
Pelo que pude ver, tenho que editar o makefile em '.../arch/x86', mais sou noob na confecção de SO, como podem notar (não chego nem perto de um programador, sou físico). 
|
|
|
|
|
Registrado
|
|
|
|
|
Mounter
|
 |
« Responder #8 : Agosto 20, 2009, 02:41:32 » |
|
É sim, possivelmente terá que editar o arquivo, no caso, o Makefile no SOmBRA usa o LD para juntar os arquivos principais e nele você deverá passar o argumento ao LD onde houver essa mensagem de erro.
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #9 : Agosto 20, 2009, 02:59:30 » |
|
Alterei o makefile em '.../arch/x86': x86.o: $(OBJ)
@$(LD) -r -m32 $(OBJ) -o ../$@ Essa flag -m32 é apenas para o gcc, ou posso colocar no ld também? olhei o manual do ld e encontrei a flag --verbose, a saída para esta flag foi: #ld --verbose GNU ld (GNU Binutils for Debian) 2.18.0.20080103 Supported emulations: elf_x86_64 elf_i386 i386linux using internal linker script: ================================================== /* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64)
Tem mais coisa nessa saída, ainda estou analisando o que significa. As primeiras linhas indicam que há suporte para emulação de 'elf_i386', mais preciso descobrir o que significa o resto para ter certeza... 
|
|
|
|
|
Registrado
|
|
|
|
|
Mounter
|
 |
« Responder #10 : Agosto 20, 2009, 03:27:29 » |
|
No LD acrescenta o argumento --oformat=elf32-i386 que possivelmente deverá funcionar.
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #11 : Agosto 20, 2009, 03:57:20 » |
|
Já havia testado essa flag. Alterei o makefile em '.../arch/x86': x86.o: $(OBJ)
@$(LD) -r --oformat=elf32-i386 $(OBJ) -o ../$@ A saída agora é essa: ld: Relocatable linking with relocations from format elf32-i386 (start.o) to format elf32-i386 (../x86.o) is not supported Acho que meu debian não esta configurado para compilação cruzada, estou a verificar isso. Ou então há algo impedindo em start.S, ai não é comigo, ainda estou nas primeiras lições de assembly. Parece que o gnomo usa o debian, não sei se é o amd64, talvez ele ajude...
|
|
|
|
|
Registrado
|
|
|
|
|
Mounter
|
 |
« Responder #12 : Agosto 20, 2009, 04:01:27 » |
|
O start.S é compilado com o nasm, unica coisa que GCC faz nele é a interpretação de macros... Pode ser que seja o seu nasm ai... Mas vamos esperar o gnomo que ele tem mais experiência no Linux do que eu.
|
|
|
|
|
Registrado
|
|
|
|
|
gnomo
|
 |
« Responder #13 : Agosto 20, 2009, 06:00:27 » |
|
Só uma pergunta básica, você executou make clear ? quero dizer, o arquivo x86.o em 64-bits foi apagado? tenha a certeza que ele foi apagado depois de adicionar as flags ao gcc e ao ld, no mais agora estou usando um Debian 32-bits, assim que chegar em casa verifico no meu notebook que tem Debian 64-bits, ainda hoje devo postar algo.
|
|
|
|
|
Registrado
|
|
|
|
underline_bruce
OS Newbie
Karma: 0
Mensagens: 14
|
 |
« Responder #14 : Agosto 20, 2009, 06:31:06 » |
|
Na verdade eu apago o diretório inteiro e descompacto novamente, pra não ficar duvida... Estava estudado 'linker script', tenho quase certeza que é ai que esta o erro... Vi os scripts da pasta 'arch/ldscript', mais ainda sou leigo no assunto. No makefile principal há a linha: @$(LD) -T arch/ldscript/$(ARCH).ld -o ../bin/$@ $(OBJ) klibc.a Deveria constar algo do tipo (outro script talvez) no makefile da pasta 'arch/x86', afinal é nessa pasta que surge o erro... faz sentido? 
|
|
|
|
|
Registrado
|
|
|
|
|