Autor Tópico: Incluir ficheiros .h criados por mim  (Lida 4805 vezes)

Offline _Seven_

  • Usuário Ubuntu
  • *
  • Mensagens: 38
    • Ver perfil
Incluir ficheiros .h criados por mim
« Online: 22 de Abril de 2008, 14:19 »
Ola pessoal. Eu criei uma libraria que tem o seguinte código:

Código: [Selecionar]
//liberr.h
void hello(void);

e criei o ficheiro .c associado:

Código: [Selecionar]
//liberr.c

#include <stdio.h>

void hello(){

printf("hello world\n");

}

depois fiz um pequeno programa para utilizar esta libraria:

Código: [Selecionar]
//errteste2.c

#include "liberr.h"
#include <stdio.h>

int main(){

printf("aiaiaiaiai...\n");
hello();

return 0;
}

só que ao tentar compilar dá erro! Da o seuinte erro:
"paulo@paulo-laptop:~/Desktop$ gcc -g errteste2.c -o errteste2
errteste2.c: In function ‘main’:
errteste2.c:6: warning: incompatible implicit declaration of built-in function ‘printf’
/tmp/ccQuqGmd.o: In function `main':
/home/paulo/Desktop/errteste2.c:7: undefined reference to `hello'
collect2: ld returned 1 exit status"

sinceramente não sei o porque de isto acontecer! O que poderá ser? Desde já obrigado pela ajuda
By Seven

Offline kcnp

  • Usuário Ubuntu
  • *
  • Mensagens: 88
    • Ver perfil
Re: Incluir ficheiros .h criados por mim
« Resposta #1 Online: 22 de Abril de 2008, 20:08 »
É o seguinte. Você ta compilando:

gcc -g errteste2.c -o errteste2

o certo seria:

gcc -g errteste2.c liberr.c -o errteste2

Perceba que você tem que colocar nos parametros de compilação o arquivo .c que implementa o cabeçalho .h

Outra coisa, essa linha de compilação acima é caso os três arquivos estejam no mesmo diretorio

Existe outra maneira de compilar:

gcc -c liberr.c
gcc -g errteste2.c liberr.o -o errteste2

perceba que esta ultima forma gera um binario liberr.o

Outra coisa, essa linha de compilação acima é caso os três arquivos estejam no mesmo diretorio.
« Última modificação: 22 de Abril de 2008, 21:21 por kcnp »
kcnp

Offline IgorM0L

  • Usuário Ubuntu
  • *
  • Mensagens: 487
  • Lokos está morto. Vamos ressucitá-lo?
    • Ver perfil
    • Yrado.net
Re: Incluir ficheiros .h criados por mim
« Resposta #2 Online: 25 de Abril de 2008, 11:59 »
Ola, como vai?

  Somente para complementar, montei um Makefile para treinar um pouco de servir de exemplo:

 
Código: [Selecionar]
# EXEMPLO DE MAKEFILE

# variaveis
CC = gcc
RM = rm
FLAG_C = -c
FLAG_O = -g -o
#-------------------------
NOME_DO_PROGRAMA=errteste2
ARQUIVO_BIBLIOTECA=./liberr
ARQUIVO_MAIN=./errteste2

# acao principal
all: programa

programa: biblioteca main
$(CC) $(FLAG_O) $(NOME_DO_PROGRAMA) $(ARQUIVO_BIBLIOTECA).o $(ARQUIVO_MAIN).o
$(RM) *.o
@echo "Compilacao concluida!"
 
biblioteca:
$(CC) $(FLAG_C) $(ARQUIVO_BIBLIOTECA).c

main:
$(CC) $(FLAG_C) $(ARQUIVO_MAIN).c

Eh so salvar isso como arquivo Makefile, ir ate o diretorio onde ele se encontra e rodar o comando make.

Darcamo

  • Visitante
Re: Incluir ficheiros .h criados por mim
« Resposta #3 Online: 26 de Abril de 2008, 14:02 »
Caso tenha interesse, fiz um tutorial sobre Makefile faz tempo aqui no fórum com o básico para se usar o programa Make e adequá-lo as suas necessidades.
http://ubuntuforum-pt.org/index.php/topic,21155.0.html

Offline IgorM0L

  • Usuário Ubuntu
  • *
  • Mensagens: 487
  • Lokos está morto. Vamos ressucitá-lo?
    • Ver perfil
    • Yrado.net
Re: Incluir ficheiros .h criados por mim
« Resposta #4 Online: 26 de Abril de 2008, 14:17 »
Caso tenha interesse, fiz um tutorial sobre Makefile faz tempo aqui no fórum com o básico para se usar o programa Make e adequá-lo as suas necessidades.
http://ubuntuforum-pt.org/index.php/topic,21155.0.html

  Eu nao conhecia seu tutorial, ficou bacana.

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Incluir ficheiros .h criados por mim
« Resposta #5 Online: 27 de Abril de 2008, 12:04 »
Eu costumo não usar declarações no estilo C++ em programas C... por exexemplo:

void hello(void);

void hello()
{
  printf("blablabla\n");
}


Note que na definição da função falta o "void" na lista de parâmetros. Isso funciona bem em C++, mas não é o padrão de C... Talvez (e só talvez, não testei) o erro esteja ai...

Grande Abraço,
Frederico L. Pissarra

Offline IgorM0L

  • Usuário Ubuntu
  • *
  • Mensagens: 487
  • Lokos está morto. Vamos ressucitá-lo?
    • Ver perfil
    • Yrado.net
Re: Incluir ficheiros .h criados por mim
« Resposta #6 Online: 27 de Abril de 2008, 16:01 »
Eu costumo não usar declarações no estilo C++ em programas C... por exexemplo:

void hello(void);

void hello()
{
  printf("blablabla\n");
}


Note que na definição da função falta o "void" na lista de parâmetros. Isso funciona bem em C++, mas não é o padrão de C... Talvez (e só talvez, não testei) o erro esteja ai...

Grande Abraço,
Frederico L. Pissarra

  Os compiladores modernos realmente nao precisam de colocar o void na lista de paramtros, como o gcc; Mas claro, eh o mais correto.