-l<name>
это всего лишь ярлык с надписью «искать lib<name>.so
или lib<name>.a
в настроенных путях к библиотекам», и он -L.
просто добавляет текущий каталог к указанному пути.
Конечно, -l
предпочтительнее при использовании реальных библиотек, так как это устраняет необходимость знать полный путь к библиотеке или различные сведения об ОС (например, .so
vs .dylib
vs .a
vs .dll
), но при выводе исполняемого файла не должно быть никакой разницы.
$ gcc -o out1 main.c libtest.so $ gcc -o out2 main.c -L. -ltest $ md5sum out* b1b8f46bf6091377b202df90d6bd32cc out1 b1b8f46bf6091377b202df90d6bd32cc out2
Смотрите ld
страницу руководства для более подробного описания обоих -l
и -L
.