Ajuda MAKEFILE [RESOLVIDO]

1. Ajuda MAKEFILE [RESOLVIDO]

Valter
dudu100

(usa Ubuntu)

Enviado em 07/05/2009 - 21:58h

ola, gostaria de saber o seguinte tenho um arquivo makefile, no começo esta assim "cc=gcc", ou seja o programa padra de compilação eo gcc certo? dentro da pasta possuo arquivos .c, .h, so que esses arquivos sao do proprio projeto, eles nao utilizam bibliotecas externas. gostaria de saber como faço pra o make file buscar bibliotecas externas tipo "stdio.h", caso eu coloque um ".h" que eu criei contendo uma funçao que eu criei?

o makefile esta assim:
AS=as -32
CC=gcc

CFLAGS= -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin -ffreestanding -fno-stack-protector -fPIC

OBJS= head.o reloc.o main.o test.o init.o lib.o patn.o screen_buffer.o \
config.o linuxbios.o memsize.o pci.o controller.o random.o extra.o \
spd.o error.o dmi.o



  


2. Re: Ajuda MAKEFILE [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 08/05/2009 - 09:10h

não entendi muito o que quer dizer com 'makefile buscar bibliotecas externas', mas se o objetivo for determinar a um alvo que deve utilizar sua header, basta inclui-la como requisito do alvo.
por exemplo, supondo que você tenha source.c a ser compilado pelo alvo target.o, e que requer header.h
no makefile fica:
target.o: source.c header.h

assim, por eliminatória, o alvo não será atingido caso sua header não exista, e também, qualquer modificação na sua header obrigará o make a refazer o alvo.

agora, se o objetivo for a inclusão automática da sua header no makefile durante o processo de configure, aí você precisará adicionar alguma macro do tipo AC_CHECK_HEADER no configure.in e adicionar a header no Makefile.in/am, seja por substituição via automake ou diretamente.


3. Ajuda MAKEFILE

Valter
dudu100

(usa Ubuntu)

Enviado em 08/05/2009 - 14:29h

Entao a questao é consegui fazer uns avanços, por exemplo num arquivo dentro do source code eu consigo por exemplo dar um #include <stdio.h>, ate aqui blz 100%, porem dentro de uma função eu escrevo "printf("ola")", da um erro ::::
lib.c:(.text+0x129e): undefined reference to `__printf_chk'
make: ** [memtest_shared] Erro 1

por da esse erro sendo que ele aceita i incude??????


4. Re: Ajuda MAKEFILE [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 08/05/2009 - 15:21h

ah, agora que eu vi, você é aquele que está compilando o memtest.
acontece o seguinte: se você reparar nas cflags, há -fno-builtin -ffreestanding
-ffreestanding indica que o programa será compilado para rodar sem biblioteca padrão, então não é válido usar funções padrão (como printf por exemplo), além de outras características 'não-padrão', como a possibilidade de não haver função main.
-fno-builtin indica que não devem ser usadas as funções embutidas do gcc (que também implementa uma versão de printf)

como o memtest realmente irá rodar em condições em que não há uma biblioteca padrão, fica inviável você usar printf. é mais ou menos o caso do kernel, que tem uma implementação própria do printf (printk). eu olhei os fontes do memtest no outro dia, e há uma função cprint (ou algo parecido) que faz mais ou menos o papel de printf, você pode utilizá-la.


5. Ajuda MAKEFILE

Valter
dudu100

(usa Ubuntu)

Enviado em 08/05/2009 - 15:55h

Amigo o problema e mais complexo, eu estava aqui olha e na minha logica vejo duas possibilidades:
1: Eu precisava da função system(""), por que eu preciso na hora do teste executar um .exe que tira um print screen da tela e salva no pen-drive.

2: eu estava reparando que na hora que o teste esta em execução ele nao aceita qualquer tecla do teclado, inclusive ctrl+alt+del, na verdade ele so aceita ("ESC-robbot", "C-Configure","Page-Up" e "Page-Dawn"),
eu preciso liberar uma tecla tipo ("ctrl+F12"), pra poder tentar executar esse programa por meio de um (.bat), por que preciso tirar o print-screen do teste e salvar no pendrive .

Caso voce tenha alguma ideia estou precisando mesmo de ajuda.


6. Re: Ajuda MAKEFILE [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 08/05/2009 - 22:44h

olhei novamente os fontes. faça o seguinte:
em lib.c, na função check_input você pode adicionar a tecla correspondente criando um novo case no bloco switch (observe que o valor será: ascii & 0x7f)
então, caso seja a tal tecla, você chama sua função para print screen (digamos, print_screen). porém, você terá que implementá-la. o método de executar um .bat ou .exe não faz sentido, visto que não há um sistema operacional dos-like e nem capaz de rodar executáveis pe durante a execução do memtest (que a grosso modo estará atuando como um so).
para implementar, a saída mais óbvia é o assembly. se não me engano há uma interrupção que envia a tela atual para a impressora, e então talvez possa ser redirecionada a algum arquivo via int 13h

apenas como adendo: repare que lib.c implementa as funções básicas da biblioteca padrão, conforme mencionei no post anterior.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts