gcc を使用して C++ アプリケーションにリンクしたい作業中の C ライブラリがありますが、リンカ (g++) で「複数定義」エラーが発生します。C アプリケーションと gcc で動作します。インターフェイスを定義するすべてのヘッダーには、次のものが含まれます。
#ifdef __cplusplus
extern "C" {
#endif
「nm」コマンドを使用してライブラリを確認したところ、メソッドの定義が複数あります (問題のメソッドはパブリック インターフェイスからのものではありません)。
私の質問は次のとおりです。
ライブラリに複数の定義があるのはなぜですか (T を持つものと U を持つものがあります)。
ファイルを含むアプリケーションが C アプリケーション (ビルドに -Wall を使用している) の場合、なぜ機能するのですか?
特別な属性が必要ですか、特定のファイル拡張子を使用して機能させる必要がありますか、それともプログラミング学校に戻る必要があるのですか :) ?
lib.a ファイルに注目すると、オブジェクトの 1 つが 2 回含まれていることがわかります。たとえば、同じオブジェクトに対して 2 つのセクションがあります。
obj1.o
00000000 T Method
obj2.o
00000000 T Hello
obj1.o
00000000 T Method
これが問題だと思いますか?
どんな助けでも本当に感謝しています。