Общие объекты (.so) не являются библиотеками, они являются объектами. Вы не можете извлечь их часть и вставить в другие библиотеки.
Что вы можете сделать, если создадите общий объект, который ссылается на другой - но другой потребуется во время выполнения. Просто добавьте -lbar при компоновке libfoo.
Если вы можете собрать libbar, вы, очевидно, можете создать библиотеку, которая является комбинацией libfoo и libbar. IIRC, вы также можете заставить компоновщик создать библиотеку, которая является libfoo и необходимой частью libbar, связав .a с .o, предназначенным для перехода в libbar Пример:
gcc -fPIC -c lib1.c # define foofn(), reference barfn1()
gcc -fPIC -c lib2a.c # define barfn1(), reference barfn2()
gcc -fPIC -c lib2b.c # define barfn2()
gcc -fPIC -c lib2c.c # define barfn3()
gcc -c main.c # reference foofn()
ar -cru libbar.a lib2*.o
gcc -shared -o libfoo.so lib1.o -L. -lbar
nm libfoo.so | grep barfn2() # ok, not here
gcc -o prog main.o -L. -lfoo
env LD_LIBRARY_PATH=. ./prog # works, so foofn(), barfn1() and barfn2() are found