Incluir ficheiros .h criados por mim

Iniciado por _Seven_, 22 de Abril de 2008, 14:19

tópico anterior - próximo tópico

_Seven_

Ola pessoal. Eu criei uma libraria que tem o seguinte código:


//liberr.h
void hello(void);


e criei o ficheiro .c associado:


//liberr.c

#include <stdio.h>

void hello(){

printf("hello world\n");

}


depois fiz um pequeno programa para utilizar esta libraria:


//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

kcnp

#1
É 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.
kcnp

IgorM0L

Ola, como vai?

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

  # 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

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

IgorM0L

Citação de: Darcamo 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

  Eu nao conhecia seu tutorial, ficou bacana.

fpissarra

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

IgorM0L

Citação de: fpissarra 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

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