次の形式でいくつかのグローバル変数を宣言したヘッダー ファイルがあります。
定数.h
#ifndef CONSTANTS_H
#define CONSTANTS_H
extern unsigned var;
EXPORT_SYMBOL(var);
#endif
定数.c
#include "constants.h"
unsigned var = 10;
foo.c
#include "constants.h"
カーネル モジュールをコンパイルしようとすると、エクスポートされたシンボルごとに次のエラーが発生します。
WARNING: /home/vilhelm/proj/constants: 'var' exported twice. Previous export was in /home/vilhelm/proj/foo.ko
constants.hヘッダー ファイルをインクルードするたびにシンボルがエクスポートされているのではないかと思いますが、その理由がわかりません。constants.hのインクルード ガードは、EXPORT_SYMBOL(var)
が複数回読み取られるのを防ぐべきではありませんか?