¿Por qué algunas bibliotecas estáticas (lib * .a) se pueden vincular de la misma manera que las bibliotecas compartidas (lib * .so) están vinculadas (ld -l interruptor), pero algunos no pueden?Forma correcta de vincular una biblioteca estática utilizando GCC
Siempre me han enseñado que todas las bibliotecas, estáticas o no, se pueden vincular con -l ..., sin embargo, he encontrado una biblioteca hasta el momento (GLFW), que no hace más que arrojar "referencia indefinida" errores de enlace si intento vincularlo de esta manera.
Según la respuesta en this question, la forma "correcta" de vincular las bibliotecas estáticas es incluirlas directamente, junto con mis propios archivos de objeto, en lugar de usar -l. Y, en el caso de la biblioteca GLFW, esto definitivamente resuelve el problema. Pero cada otra biblioteca estática que estoy usando funciona bien cuando se vincula con -l.
Así:
- Lo que podría causar esta una biblioteca a no funcionar cuando se unen en lugar de directamente incluido? 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 las bibliotecas estáticas de la misma manera que las bibliotecas compartidas? (Y si no, ¿por qué no?)
- ¿El enlazador aún puede eliminar las funciones de biblioteca no utilizadas del ejecutable de salida cuando la biblioteca se incluye directamente de esta manera?
Sí, las rutas de acceso a cada biblioteca se proporcionan utilizando -L, antes del indicador -l correspondiente. GCC puede encontrar la biblioteca, pero proporciona una gran cantidad de errores de referencia no definidos dentro de la biblioteca. – Nairou