いくつかの c および h ファイルを含む C プログラムがあります。プログラムの一部を「ヘッダーのみ」にすることにしたので、コードを c から h に移動しました。現在、倍数定義の問題が発生していますが、その理由がわかりません。例えば:
main.c includes utils.h
vector.c includes utils.h
utils.c のすべてを utils.h に移動しました (もちろん、プロジェクトから utils.c を削除しました)。utils.h は次で始まります
#ifndef UTILS_H_
#define UTILS_H_
// and end with:
#endif
ガードが一意であることを確認するために、変更してみました (例: UTILS718171_H_) が、機能しません。
それでも、コンパイラは不平を言います:
/tmp/ccOE6i1l.o: In function `compare_int':
ivector.c:(.text+0x0): multiple definition of `compare_int'
/tmp/ccwjCVGi.o:main.c:(.text+0x660): first defined here
/tmp/ccOE6i1l.o: In function `compare_int2':
ivector.c:(.text+0x20): multiple definition of `compare_int2'
/tmp/ccwjCVGi.o:main.c:(.text+0x6e0): first defined here
/tmp/ccOE6i1l.o: In function `matrix_alloc':
ivector.c:(.text+0x40): multiple definition of `matrix_alloc'
/tmp/ccwjCVGi.o:main.c:(.text+0x0): first defined here
...
問題は次のようなものかもしれません.すべてのcファイルがコンパイルされ、独自のバージョンのコードが取得され、リンク時に問題が発生しますが、正直なところ、この問題を解決する方法がわかりません.