Tl; dr
Não há diferença, além do fato de que um executável compilado pode estar vinculado a um objeto compartilhado, mas não a um executável.
Em geral, existem duas maneiras de compilar 1 um executável:
- Usando a vinculação estática: bibliotecas externas incluídas no código-fonte são compiladas e a biblioteca compilada (ou objeto na perspectiva do vinculador) é adicionada ao próprio executável;
- Usando vinculação dinâmica: bibliotecas externas incluídas no código-fonte são compiladas, mas um link para a biblioteca compilada (ou objeto na perspectiva do vinculador) é adicionada ao executável (e às bibliotecas / objetos compilados são carregados pelo vinculador em tempo de execução, se necessário);
Existem vantagens / desvantagens no uso de cada um desses métodos, mas esse não é o ponto da questão;
-
/bin/ntfsck
e/usr/bin/gawk
são objetos compartilhados: isso significa que um executável pode ser compilado e vinculado a eles para usar suas funcionalidades; -
/bin/echo
é um executável: isso significa que um executável pode ser não compilado e então vinculado a ele para usar suas funcionalidades;
Portanto, /bin/ntfsck
e /usr/bin/gawk
são bibliotecas tecnicamente compiladas (ou objetos na perspectiva do vinculador), mas, como se pode ter visto, nada impede que um objeto compartilhado seja executado como um executável.
Em uma nota secundária, observe também que file
relatórios (para cada um deles):
dinamicamente vinculado (usa bibliotecas compartilhadas)
Isso significa que cada um deles está dinamicamente vinculado a (e provavelmente usa) outros objetos compartilhados também.
1. "Compile" destina-se em sua aceitação mais ampla, que inclui pré-processamento, compilação e vinculação.