g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object
Я не уверен насчет gcc, но для g ++ мне пришлось добавить параметр компоновщика --whole-archive, чтобы включить объекты из статических библиотек в общий объект.
Опция --no-whole-archive необходима, если вы хотите создать ссылку на libc_static_lib.a и libother_shared_object.so, но не включать их в megalib.so.