困っています。助言お願いします。

同名の関数が使われている複数のモジュールをリンクしたいのですが、うまくいきません。

同じhogeというクラスが実装された複数のモジュールがあります。
モジュールの中身は複数のcppとhでできており、そのうちのいくつかは他のモジュールにも同じものが含まれています、
ここで、モジュールの中身に手を入れず、他のソースと一緒にビルドしたいのです。
それぞれのモジュールは一つずつインターフェースとなるクラスを持っており、このクラスだけを公開する形で結合したいです。

分かりにくいかもしれませんが、よろしくお願いします。

【追記】
分かりにくい質問で申し訳ありません。
元々は静的ライブラリで実現したいと考えていましたが、調べた限りでは静的ライブラリは可視性の設定が出来ないらしいので、共有ライブラリが現実的なのでは?とも考えています。

エラーの内容ですが、まず普通にリンクしようとすれば当然多重定義エラーが発生します。
そこで可視性をhiddenに設定して共有ライブラリを作成したのですが、今度はライブラリ内のシンボル同士がお互いを見つけられず、未定義のエラーとなります。

今回実現したい形としては、クラスや関数の可視性をそれぞれのライブラリファイル内のみにした上で、インターフェースとなるクラスのみを公開することです。

やはり名前空間で区切るしかないのでしょうか?