Ol� F�bio e pessoal. Em primeiro lugar, muito obrigado pela resposta. Est�
sendo muito �til, principalmente para formular novas d�vidas.
On Sat, 26 May 2001, Fabio Russo wrote:
> Marcio Roberto Teixeira wrote:
> >
> > Ol� pessoal.
> >
> > Tenho algumas d�vidas a respeito das bibliotecas (program library). Lendo
> > o Program-library-HOWTO entendi o seguinte. Bibliotecas s�o programas que
> > cont�m c�digo compilado a ser inclu�do em outros programas. Existem para,
> > entre outras coisas, facilitar o desenvolvimento de um programa, que
> > torna-se um conjunto de v�rias sub-rotinas, as bibliotecas,
> > "linkadas" entre si.
> >
> > O que determina se uma biblioteca � est�tica, compartilhada (shared) ou
> > dinamicamente carregada (DL), � o momento em que � "linkada". Se � linkada
> > na compila��o do programa, sendo, por isto, carregada (loaded) ANTES do
> > programa ser executado, � est�tica. Se � linkada na inicializa��o do
> > programa, � compartilhada. Se � linkada em qualquer tempo durante a
> > execu��o do programa, � dinamicamente carregada.
> >
> > Certo at� a�?
> Mais ou Menos, Existem bibliotecas estaticas e dinamicas.
> Todas as bibliotecas dinamicas s�o compartilhadas, esse
> HOW-TO que vc leu deve ser do tempo dos aout...
Mas nem toda compartilhada (shared) � DLL (dynamic loaded library),
certo? Quero dizer, segundo este HOWTO h� uma diferen�a: shared s�o
livrarias "linkadas" na inicializa��o do programa e dll s�o livrarias
"linkadas" em qualquer tempo da execu��o (e, portanto, podendo ser
inclusive na inicializa��o, certo?). Portanto, toda livraria
compartilhada, dadas estas defini��es, s�o livrarias dll; mas nem toda dll
� shared. Certo? Isto n�o vale mais atualmente? H� alguma documenta��o
mais recente.
> > Se � assim, n�o h� nada no c�digo da biblioteca que a fa�a est�tica,
> > compartilhada ou dl, certo? Posso, ent�o, perguntar:
> Existe alguma diferen�a no modo de compilar a biblioteca,
> Mas o c�digo � o mesmo.
Ou seja, o c�digo fonte da biblioteca � o mesmo mas o c�digo compilado
(como chamo? bin�rio, c�digo objeto?) � diferente? Ou apenas o modo de se
referir a este c�digo compilado � diferente? (ex. libfoo.a para est�ticas
e libfoo.so para compartilhadas)
> Existem vantagens e desvantagens nos dois tipos de biblioteca.
> A biblioteca estatica n�o ocupa recurso do sistema se o programa
> n�o est� sendop usado, e o programa � mais portavel, pois n�o
> se faz necessaria a instala��o da biblioteca para que o programa
> funcione. A biblioteca dinamica ou compartilhada ocupa menos memoria
> para rodar dois ou mais programas que fazem chamadas a ela, mas vai
> ocupar a mesma memoria de uma biblioteca estatica com a mesmas fun�oes
> se vc executar um programa s�. Isso porque a biblioteca dinamica nada
> mais � que a biblioteca estatica compilada e linkada.
> > O que � preciso fazer para transformar uma biblioteca est�tica em uma
> > compartilhada?
> #gcc -Wall -c arquivo1.o arquivo2.o arquivo3.o arquivo4.o -o
> libnome.so.1.0.0
> #mv libnome.so.1.0.0 /lib
> pronto, t� a� a sua biblioteca dinamica, agora crie um diret�rio
> /usr/include/nome_da_lib e mova os includes(header) para l�.
> Os comandos para isso seguem abaixo:
> #mkdir /usr/include/nome_da_lib
> #mv *.h /usr/include/nome_da_lib
> Estou levando em considera��o que vc est� no diret�rio em que foi criada
> a lib.
> Nao esque�a de colocar o path completo da sua lib no /etc/ld.so.conf
O que o arquivo-cabe�alho (header) faz?
> > Instalei a libssl.a e libcrypto.a (projeto openssl) "na m�o". Como indica
> > o ".a", trata-se de bibliotecas est�ticas. O que fa�o para torn�-las
> > compartilh�veis?
> N�o � uma boa id�ia, mas se vc quiser, l� vai:
Por que n�o � uma boa id�ia? Estou tentando compilar o licq. Agora me
dei conta do seguinte: eu estava at� ent�o pensando que para compilar o
licq com suporte a ssl eu precisava que esta biblioteca fosse compilada
como compartilhada? Est� certo? � necess�rio?
> #ar -vx libssl.a
> #gcc -Wall -c arquivo1.o arquivo2.o arquivo3.o -o libssl.so.<versao>
> #mv libssl.so.<versao> /lib
> #ln -s libssl.so.<versao> lissl.so.<dois primeiros numeros da versao>
> Exemplo:
> ln -sf libssl.so.2.0.1 libssl.so.2.0
> Mova os includes file para um diret�rio dentro do seu /usr/include e
> pronto.
> Agora para usar a sua biblioteca, � s� vc colocar no seu programa os
> headers
> da libssl:
> #include <libssl/header.h>
> Onde libssl � o diret�rio que vc criou, e
> header.h � o nome dos includes da libssl que vieram no seu pacote...
> inclua o path no /etc/ld.so.conf e rode o ldconfig e pronto.
Para compilar o licq com ssl, li no INSTALL que basta indicar no configure
o path dos headers e da lib. Isto deve bastar, n�?
[corta]
> Qualquer duvida, me escreva...
Escrevi!
>Russo.
Mais uma vez, obrigado
t� +
--
Marcio Teixeira
Usu�rio "tch�" Linux
ICQ: 77147205
Porto Alegre - RS - Brasil
"A vida � como uma boa prova escolar: � curta, com m�ltiplas escolhas."
O "world" n�o � o Word. Uso LaTeX: viva o c�digo aberto!
Assinantes em 28/05/2001: 2296
Mensagens recebidas desde 07/01/1999: 115377
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]