Обычно библиотеки представляют собой наборы объектных файлов, которые могут использоваться в нескольких программах.
В вашем примере нет никакого преимущества, но вы могли бы сделать:
ar rcs liboneandtwo.a one.o two.o
Тогда связывание вашей программы становится проще:
gcc -L. prog.c -loneandtwo
Это действительно вопрос упаковки. Есть ли у вас набор объектных файлов, которые, естественно, образуют набор связанных функций, которые можно повторно использовать в нескольких программах? Если это так, то они могут быть разумно заархивированы в статическую библиотеку, в противном случае, вероятно, нет никакого преимущества.
Существует одно важное отличие в последнем шаге ссылки. Любые объектные файлы, которые вы связали, будут включены в финальную программу. Объектные файлы, находящиеся в библиотеках, включаются только в том случае, если они помогают разрешать любые неопределенные символы в других объектных файлах. Если они этого не сделают, они не будут связаны в окончательный исполняемый файл.