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

1

Estou tentando aprender como tornar static & bibliotecas dinâmicas, e estou tendo um pouco de dificuldade em entender meu professor em relação às bibliotecas. Minha ideia de criar uma biblioteca dinâmica é esta:

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 anterior deve ficar assim:

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

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

    
por Nebbs 17.02.2014 / 22:13

1 resposta

1

-l<name> é apenas um atalho que diz "procure lib<name>.so ou lib<name>.a nos caminhos da biblioteca configurados", e -L. apenas adiciona o diretório atual ao caminho mencionado.

Naturalmente, -l é preferido ao usar bibliotecas reais, pois elimina a necessidade de conhecer o caminho completo da biblioteca nem vários detalhes do SO (como .so vs .dylib vs .a vs .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 página de manual ld para obter uma descrição mais longa de ambos os -l e -L .

    
por 17.02.2014 / 22:25