Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: Diego_Rocha em 05 de MAR?O de 2007, 12:34
-
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++
-
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...
-
Valeu cara exemplo apostila muito boa, vai me ajudar muito, muito obrigado t++ ;D
-
"Tai" uma coisa que eu sempre quis aprender. :o
-
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++
-
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, ???
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
-
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));
}
-
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 :)
-
Uma forma muito trivial de compilar uma biblioteca é:
Que significa trivial ?
-
trivial = simples
-
Julga-se. Algo sabido de todos.
-
Julga-se. Algo sabido de todos.
Perdão mais não entendi,
-
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; ??
-
Julga-se. Algo sabido de todos.
Literalmente.
-
É o que diz no meu dicionário:
(https://ubuntuforum-pt.org/proxy.php?request=http%3A%2F%2Fi86.photobucket.com%2Falbums%2Fk109%2Fginho_album%2FScannedpicture.png&hash=6935f8e834a534c7d3369d4a911e738e042b136d)
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.
-
Julga-se. Algo sabido de todos.
Literalmente.
Dá pra traduzir o que significa essa frase? >:(
-
hHAHHAHEHAUHEHAU achei que você tava tirando sarro da gente ou algo do genero. foi mal ginho
-
É o que diz no meu dicionário:
(https://ubuntuforum-pt.org/proxy.php?request=http%3A%2F%2Fi86.photobucket.com%2Falbums%2Fk109%2Fginho_album%2FScannedpicture.png&hash=6935f8e834a534c7d3369d4a911e738e042b136d)
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.
Da proxima vez voce poderia ser mais direto na sua respota senao deixa todo mundo confuso t++
-
E ai galera aprendi a fazer biblioteca mesmo que seja o basico consegui ;D ;D vou postar aqui como fiz,
1° uma função, que coloquei o nome de func.c
void comando(char *_nome[200])
{
printf("Seu nome é %s\n",_nome);
}
2° criei um header, que chamei de func.h
#include <stdio.h>
extern int comando(char *_nome);
3° criei o main, que chamei de main.c
#include "func.h"
int main()
{
char nome[200];
printf("Digite seu nome --> ");
scanf("%s", nome);
comando(nome);
return 0;
}
depois compilei da seguinte fomar
gcc -c func.c //esse comando gerou o func.o
depois compilei o programa
gcc main.c func.o -o teste
e depois executei e funcionou normal, é claro que isso so foi um teste que fiz so para aprender, e valeu muito
-
Só uma pergunta cara:
Por que criar 2 arquivos se pode faze-lo em um só ?
por exemplo essa função que você fez poderia se resumir assim :
func.h
void comando(char *c[200])
{
printf("Seu nome é %s\n",_nome);
}
func.c
#include "func.h"
int main()
{
char nome[200];
printf("Digite seu nome --> ");
scanf("%s", nome);
comando(nome);
return 0;
}
pronto daria na mesma.
ai seria só compilar
gcc func.c -o func
1/2 do trabalho feito pelo jeito que aprendeu
-
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...
Baixei essa apostila e como eu suspeitava é uma que eu já conhecia a muito tempo (e que me veio logo na cabeça quando li o título do tópico). Ela é muito boa e bem completa. Inclusive na parte que fala de como criar e utilizar uma biblioteca. Sem dúvida um excelente material (e ainda por cima em português) para aprender C++ dentre outras coisas.