linking library example c linux unix gcc shared-libraries

linking - c shared library example



Fusionar mĂșltiples bibliotecas compartidas.so (2)

En la práctica, no es posible.

Desde el punto de vista del enlazador, una biblioteca SO es un producto final que no contiene la información de reubicación necesaria para vincular.

Si tiene acceso a los archivos de origen o de objeto para ambas bibliotecas, es sencillo compilar / vincular un SO combinado de ellos.

Digamos que tengo a.so y b.so. ¿Puedo producir c.so como una única biblioteca compartida con todas las funciones exportadas por ay b, por supuesto, resolviendo todas las intradependencias (es decir, todas las funciones de b.so llamado por a.so y viceversa)?

Lo intenté

gcc -shared -Wl,soname,c.so -o c.so a.so b.so

pero no funciona.

Lo mismo ocurre si archivo ao y bo en aa y ba (que no debe modificar ao y bo), y hago

gcc -shared -Wl,soname,c.so -o c.so a.a b.a

Gracias


La fusión de varias bibliotecas compartidas en una es prácticamente imposible en todos los UNIXen, excepto en AIX: el vinculador considera el .so un producto "final".

Pero fusionar archivos en .so no debería ser un problema:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive