Criando uma biblioteca dinâmica, este é o caminho correto?

1

Estou tentando aprender a criar bibliotecas estáticas e dinâmicas e estou com um problema para entender meu professor sobre as bibliotecas. Minha idéia para criar uma biblioteca dinâmica é a seguinte:

gcc -c main.c -o main.o
gcc -c -fPIC func.c -o func.o
gcc -shared -Wl,-soname,-libfunc.so.1 -o libfunc.so.1.0.1 func.o
ldconfig -n .
ln -sf libfunc.so.1.0.1 libfunc.so
gcc main.o libfunc.so.1.0.1 -o prog1
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

Agora meu professor diz que a linha antes da última deve ficar assim:

gcc main.o -o prog1 -L. -lfunc

Alguém pode me explicar a diferença exata entre os dois? Obrigado!

Nebbs
fonte

Respostas:

1

-l<name>é apenas um atalho que diz "procurar lib<name>.soou lib<name>.anos caminhos da biblioteca configurados" e -L.apenas adiciona o diretório atual ao referido caminho.

Obviamente, -lé preferível ao usar bibliotecas reais, pois elimina a necessidade de conhecer o caminho completo da biblioteca nem vários detalhes do sistema operacional (como .sovs .dylibvs .avs .dll), mas não deve haver diferença quando o executável está sendo produzido.

$ gcc -o out1 main.c libtest.so
$ gcc -o out2 main.c -L. -ltest
$ md5sum out*
b1b8f46bf6091377b202df90d6bd32cc  out1
b1b8f46bf6091377b202df90d6bd32cc  out2

Consulte a ldpágina do manual para obter uma descrição mais detalhada de ambos -le -L.

gravidade
fonte