Comunidade OSDevBrasil.net
Maio 22, 2012, 06:19:05 *
Bem-vindo, Visitante. Por favor faça o Login ou Registro.

Login com nome de usuário, senha e duração da sessão
Notícias: Anuncie a nossa comunidade a amigos, fóruns...
 
   Home   Ajuda Pesquisa Login Registrar  
Páginas: [1] 2
  Imprimir  
Autor Tópico: afinal o que isso significa?  (Lida 828 vezes)
underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« : 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
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« Responder #1 : Agosto 19, 2009, 11:51:05 »

Pode significar várias coisas, uma delas por exemplo é vc estar tentando compilar o SOmBRA em um sistema Linux 64-bits, vc poderia dar mais informações da origem dessa mensagem?  Hein???
Registrado

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

gnomo
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« 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

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« 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:

Código:
# 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
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« 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

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« 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...

 Indeciso
Registrado
Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« 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

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« Responder #7 : Agosto 20, 2009, 01:42:23 »

editei o 'common.mk':

Código:
# 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:

Código:
# 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).

Sorridente
Registrado
Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« 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

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« Responder #9 : Agosto 20, 2009, 02:59:30 »

Alterei o makefile em '.../arch/x86':

Código:
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:

Código:
#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...

Triste
Registrado
Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« Responder #10 : Agosto 20, 2009, 03:27:29 »

No LD acrescenta o argumento --oformat=elf32-i386 que possivelmente deverá funcionar.
Registrado

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« Responder #11 : Agosto 20, 2009, 03:57:20 »

Já havia testado essa flag. Alterei o makefile em '.../arch/x86':

Código:
x86.o: $(OBJ)

@$(LD) -r --oformat=elf32-i386 $(OBJ) -o ../$@

A saída agora é essa:

Código:
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
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« 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

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

gnomo
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« Responder #13 : Agosto 20, 2009, 06:00:27 »

Só uma pergunta básica, você executou
Código:
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

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

underline_bruce
OS Newbie
*

Karma: 0
Mensagens: 14


Ver Perfil Email
« 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:

Código:
@$(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?

 Indeciso
Registrado
Páginas: [1] 2
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines XHTML 1.0 Válido! CSS Válido!