[C++] ld: duplicate symbol エラーの解決策

C++でコードを書いていて、duplicate symbolというエラーが出てコンパイルが通らないことがあった。

たとえばこんな感じ。
g++ -O2 -o ./a.out main.cc function.o
ld: duplicate symbol Find_solution(double (*)(Param&, double), Param&, double*)in function.o and /var/folders/5x/5xQHgcY6GxS5B1fAK7NoK++++TI/-Tmp-//ccr88Eat.o
collect2: ld returned 1 exit status
make: *** [constraints] Error 1

調べてみると、同じファイルを二重に include してしまったために、
関数や変数が二重定義されることで起こるエラーのようだ。

解決策としてはヘッダファイルに
#ifndef __FUNCTION_H_INCLUDED_
#define __FUNCTION_H_INCLUDED_
・・・
#endif

と入れることで、二重インクルードを防ぐ方法が一般的。


・・・のはずなのだが、ヘッダファイルに修正を加えてもエラーがとれない。

で、よくよく見てみると
一部のコードでは “function.cc”をインクルードして
別のコードでは “function.h” をインクルードするという
奇妙な状態になっていたことが分かった。

他の人から引き継いだコードだったのでチェックしていなかったのを反省。

“function.h”をインクルードするように修正することで無事に解決をみた。

カテゴリー: Tips   パーマリンク

[C++] ld: duplicate symbol エラーの解決策 への1件のコメント

  1. ピンバック: [Error] ld: duplicate symbol | わだちの開発日記

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>