Como criar bibliotecas em c

Iniciado por Diego_Rocha, 05 de Março de 2007, 12:34

tópico anterior - próximo tópico

Diego_Rocha

Tenho uma duvida como poderia criar uma biblioteca em c, andei pesquisando no google e nao achei nada a respeito que seja bem explicado, espero que voces possam me explicar obrigado t++

Lamego

Dá uma leitura na seção do libtool na apostila:
http://www.tol.pro.br/portal/component/option,com_tutorial/func,info/item,683/Itemid,31/

Criar bibliotecas é um tópico avançado...
João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

Diego_Rocha

Valeu cara exemplo apostila muito boa, vai me ajudar muito, muito obrigado t++  ;D

solanoalves

"Tai" uma coisa que eu sempre quis aprender.  :o

Diego_Rocha

Se alguem pudesse dar em exemplo bem basico so pra ter uma ideia ficarei grato, por exempo tenho que criar um arquivo .c com as funçoes depois crio um arquivo .h declarando as funçoes e depois utilizo ela no meu programa, é isso? e se for isso como compilo com o gcc, obrigado t++

Diego_Rocha

Eu achei uma apostila em ingles que fala como criar uma biblioteca so que no exemplo ele não cria um arquivo .h ele cria arquivos .o e um .a, gostaria de uma explicação do que exatamente faz esses arquivos .o e .a ja que nessa apostila so tem o exemplo, vou postar ele aqui realmente funciona eu fiz o teste, mas ele não cria o header,  ???

Citar
Here is a simple scenario to create and use library:
-----------------------------------------------------
main.c
#include <stdio.h>
/* functions have to be external */
extern void test();
extern void util();
int main() {
   printf("in main");
   /* Let call functions in library */
   test();
   util();
   return 0;
}
-----------------------------------------------------
test.c
int test() {
   printf("in test");
   return 0;
}
-----------------------------------------------------
util.c
int util() {
   printf("in util");
  return 0;
}
-----------------------------------------------------
Lets compile above source codes:

$  gcc -c test.c
$  gcc -c util.c
$ ar rc libtest.a test.o util.o
$ ranlib libtest.a
$ gcc -c main.c
$ gcc main.o -L /home/simsek -ltest -o testprog

We compiled source files and produce a executable program named testprog by last command
above. If you run testprog, it will produce following outputs:

$ ./testprog
in main
in test
in util

solanoalves

Assim por exemplo:

funcoes.h


int produto(int a, int b)
{
return a*b;
}


programa.c


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

int main()
{
int i,t;
i=5;
t=10;

printf("\nproduto : %d\n",produto(i,t));
}

Lamego

Existem bibliotecas dinâmicas e estáticas, o mais fácil de explicar e utilizar são as estáticas.
Uma biblioteca não é mais do que um conjunto de ficheiros objecto (.o), estes ficheiros são os ficheiros gerados pelo compilador.

Uma forma muito trivial de compilar uma biblioteca é:
gcc biblioteca.c -o biblioteca.o

Depois para usar ela:
gcc programa.c bibliotecta.o -o programa

Bibliotecas mais complexas são um conjunto de .o, arquivados com o "ar".
Bibliotecas dinâmicas são mais complexas de explicar.

Se você não sabe para que serverm os .h, esquece a criação de bibliotecas, convem ser um programador experiente em C antes de pensar em criar bibliotecas :)
João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

solanoalves

CitarUma forma muito trivial de compilar uma biblioteca é:

Que significa trivial ?

Lamego

João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

ginho

Julga-se. Algo sabido de todos.

Diego_Rocha


Diego_Rocha

Citação de: Lamego online 05 de Março de 2007, 14:27
Se você não sabe para que serverm os .h, esquece a criação de bibliotecas, convem ser um programador experiente em C antes de pensar em criar bibliotecas :)

Ai cara eu acabei de criar um header aqui, não sei se fiz certo mais funcionou, e foi muito simples criei o arquivo.h com as bibliotecas que queria no meu programa criei as funçoes e depois no programa chamei o header com o #include "arquivo.h" mais ou menos assim,

arquivo.h

#ifndef _ARQUIVO_H
#define _ARQUIVO_
#include <stdio.h>

void teste(char *_nome);

void teste(char *_nome)
{
        printf("Seu nome é %s", nome);
}

#endif


e depois no meu arquivo.c fiz isso

arquivo.c

#include "arquivo.h"
int main ()
{
         char nome[100];
         printf("Qual seu nome --> ");
         scanf("%s", nome);
         teste(nome);
         return 0;
}


Agora pergunto isso esta certo como um header; ??

ginho

CitarJulga-se. Algo sabido de todos.

Literalmente.


ginho

É o que diz no meu dicionário:

Não consegui deixar melhor, é muito antigo, me acompanha deste os primeiros anos
de escola.
Nossa língua é maravilhosa. Era apenas o significado, não uma afirmação.