Enlace con biblioteca dinámica con dependencias.

Considere el siguiente escenario:

Biblioteca compartida libA.so, sin dependencias.Biblioteca compartida libB.so, con libA.so como su dependencia.

Quiero compilar un archivo binario que enlaza con la libB. ¿Debo vincular el binario solo con libB o con libA?

¿Hay alguna forma de enlazar solo con las dependencias directas, permitiendo la resolución de los símbolos no resueltos de las dependencias para el tiempo de ejecución?

Me preocupa el hecho de que la implementación de la biblioteca libB pueda cambiar en el futuro, introduciendo otras dependencias (libC, libD, libE por ejemplo). ¿Voy a tener problemas con eso?

En otras palabras:

Archivos libA: a.cpp a.harchivos libB: b.cpp b.hArchivos de programa principales: main.cpp

Por supuesto, b.cpp incluye a.h y main.cpp incluye b.h.

Comandos de compilación:

g++ -fPIC a.cpp -c
g++ -shared -o libA.so a.o

g++ -fPIC b.cpp -c -I.
g++ -shared -o libB.so b.o -L. -lA

¿Cuál de las siguientes opciones debo usar?

g++ main.cpp -o main -I. -L. -lB

o

g++ main.cpp -o main -I. -L. -lB -lA

No pude usar la primera opción. El enlazador se queja de los símbolos no resueltos de la biblioteca libA. Pero me suena un poco extraño.

Muchas gracias.

- Comentarios actualizados:

Cuando vinculo el binario, el enlazador intentará resolver todos los símbolos de main y libB. Sin embargo, libB tiene símbolos indefinidos de libA. Es por eso que el enlazador se queja de eso.

Es por eso que también necesito enlazar con la libA. Sin embargo, encontré una forma de ignorar los símbolos no resueltos de las bibliotecas compartidas. Parece que debería usar la siguiente línea de comando para hacer eso:

g++ main.cpp -o main -I. -L. -lB -Wl,-unresolved-symbols=ignore-in-shared-libs

Parece que todavía es posible utilizar el-rpath opción. Sin embargo necesito entenderlo un poco mejor.

¿Alguien sabe alguna trampa posible al usar el-Wl,-unresolved-symbols=ignore-in-shared-libs ¿opción?

- Comentarios actualizados 2:

-rpath No debe utilizarse para este propósito. Es útil forzar que una biblioteca se encuentre en un directorio dado. los-unresolved-symbol El enfoque se ve mucho mejor.

Gracias de nuevo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta