Подтвердить что ты не робот

Объединение нескольких разделяемых библиотек .so

Скажем, у меня есть a.so и b.so. Могу ли я создать c.so как единую общую библиотеку со всеми функциями, экспортируемыми a и b, конечно, разрешая все внутризависимости (т.е. все функции b.so вызываемые a.so и наоборот)?

Я пробовал

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

но это не сработает.

То же самое происходит, если я архивирую a.o и b.o в a.a и b.a(которые не должны изменять a.o и b.o) и do

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

Спасибо

4b9b3361

Ответ 1

Объединение нескольких разделяемых библиотек в одно действительно практически невозможно на всех UNIXen, кроме AIX: компоновщик считает .so "окончательным" продуктом.

Но объединение архивов в .so не должно быть проблемой:

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

Ответ 2

На практике это невозможно.

С точки зрения компоновщика, библиотека SO является конечным продуктом, который не содержит информацию о перемещении, необходимую для связывания.

Если у вас есть доступ к исходным или объектным файлам для обеих библиотек, легко скомпилировать/связать объединенные SO из них.