Mi proyecto consiste en un par de bibliotecas estáticas, que se unen entre sí en un paso final. Ahora tengo el problema, que el link order of the library is important (de lo contrario me sale un error de enlazador de símbolos indefinido). A veces me encuentro con el problema, que tengo que volver a ordenar las bibliotecas vinculadas (-lcommon -lsetup -lcontrol, etc.). Por el momento, es una prueba y un error estúpidos: reordenar, compilar, verificar errores, reordenar, compilar, etc.¿Cómo se determinan las dependencias entre bibliotecas?
Así que escribí un pequeño programa para mostrarme las inter-bibliotecas-dependencias y me genera el orden de las bibliotecas para vincular. Se lee en los símbolos definidos ('T', 'B', etc.) y no definidos ('U') de nm y elimina el weak symbols ('w', 'W', 'v' y 'V') del ' lista de símbolos indefinida '. Ahora determina para cada símbolo indefinido la biblioteca que lo resuelve.
Pero mi programa me muestra las dependencias circulares ... ¿cuál es mi error?
Si realmente existen, no podría vincular en absoluto ... así que ¿Qué extrañé al analizar la salida nm? ¿O está analizando la salida de nm no de la manera adecuada para obtener estas dependencias?
libcommon.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
libhardware.a:
00000484 T _ZN15HardwareUnit23GetHardwareSerialNumberEv
libsecurityaccess.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
---
libhardware.a:
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
libsecurityaccess.a:
00004020 T _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
¿Hay alguna manera de determinar qué 'dependencias circulares' romperán la compilación y cuáles no? – Charly
El vinculador le indica los nombres de los símbolos que no pudo resolver. –
Sí, esta es la forma en que lo estoy haciendo ahora (cuando no utilizo la 'opción de grupo' - que funciona muy bien, THX !!). Recopilo, reordeno la lista de la biblioteca y me encuentro con el siguiente error del enlazador. Si fuera capaz de calcular las dependencias de antemano, crearía el orden de la biblioteca antes de la compilación y no tendría que hacerlo por prueba y error. (En este momento hay alrededor de 20 bibliotecas y cada una tiene dependencias con otros módulos) – Charly