Я предполагаю, что вы работаете в каком-то Unix и, вероятно, используете набор инструментов GNU. В этом случае, чтобы создать правильную разделяемую библиотеку, вам необходимо скомпилировать код с использованием флагов, не зависящих от позиции (-fpic или -fPIC), прежде чем вы сможете создать разделяемую библиотеку. Если ваши файлы .o уже не скомпилированы с этими флагами, скорее всего, у вас не будет рабочей общей библиотеки.
Если они уже скомпилированы для позиционно-независимого кода, обычный g++ -shared ...
должен добиться цели.