Объединение нескольких разделяемых библиотек .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
Спасибо
Ответы
Ответ 1
Объединение нескольких разделяемых библиотек в одно действительно практически невозможно на всех UNIXen, кроме AIX: компоновщик считает .so "окончательным" продуктом.
Но объединение архивов в .so не должно быть проблемой:
gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
Ответ 2
На практике это невозможно.
С точки зрения компоновщика, библиотека SO является конечным продуктом, который не содержит информацию о перемещении, необходимую для связывания.
Если у вас есть доступ к исходным или объектным файлам для обеих библиотек, легко скомпилировать/связать объединенные SO из них.