Forma correcta de vincular una biblioteca estática usando GCC

¿Por qué algunas bibliotecas estáticas (lib * .a) pueden vincularse de la misma manera que las bibliotecas compartidas (lib * .so) están vinculadas (modificador ld -l), pero otras no?

Siempre me habían enseñado que todas las bibliotecas, estáticas o no, se pueden vincular con -l ..., sin embargo, me he encontrado con una biblioteca hasta ahora (GLFW), que no hace más que arrojar errores de enlace de "referencia indefinida" si Intento vincularlo de esta manera.

Según la respuesta enesta pregunt, la forma "adecuada" de vincular bibliotecas estáticas es incluirlas directamente, junto con mis propios archivos de objetos, en lugar de usar -l. Y, en el caso de la biblioteca GLFW, esto ciertamente resuelve el problema. Pero todas las demás bibliotecas estáticas que estoy usando funcionan bien cuando están vinculadas con -l.

Entonces

¿Qué podría hacer que esta biblioteca no funcione cuando está vinculada en lugar de incluirse directamente? Si supiera la causa, tal vez podría editar y volver a compilar la biblioteca para solucionar el problema. ¿Es cierto que se supone que no debe vincular bibliotecas estáticas de la misma manera que vincula bibliotecas compartidas? (¿Y si no, Pórque no?El enlazador todavía puede eliminar las funciones de biblioteca no utilizadas del ejecutable de salida cuando la biblioteca se incluye directamente de esta manera?

Respuestas a la pregunta(8)

Su respuesta a la pregunta