-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
.