以下を使用して、Debian から arm-linux ターゲットにいくつかのファイルをクロスコンパイルしようとしているときに、いくつかの奇妙な動作が発生しています (まあ、説明があると思います)。
$ arm-linux-gnueabi-gcc --version
$ arm-linux-gnueabi-gcc (Debian 4.3.5-4) 4.3.5
コンパイル中に次のエラー メッセージが表示されます。
dsblock1.c:167: error: non-static declaration of ‘HaveEventIterated_’ follows static declaration
ss2dym.c:778: error: previous declaration of ‘HaveEventIterated_’ was here
対応する行は次のとおりです。
ss2dym.c:778 :
extern long HaveEventIterated_;
"redeclaration" dsblock1.c:167:
long HaveEventIterated_=0;
だからここに私が得られないことがあります.
しかし、「extern」宣言は静的関数内にあります。私の推測では、これはある種の継承された動作なのでしょうか?!
質問は次のとおりです: - 私の推測が正しければ、背景の話を誰か説明してもらえますか? -たとえば、ネストされたスコープシフトやその他の魔法を可能にするトリッキーなコンパイラフラグを使用して、それを回避する簡単な方法はありますか?
ヘッダーを作成し、これらすべての extern 宣言をニュートラル スペースに配置する可能性が最も高いことはわかっていますが、何百ものエラーといくつかのファイルがあります。そして、このコードは MSVC++ を使用して適切にコンパイルされることを確認しました (これには他のスコープ制約があることはわかっていますが、arm-g++ を使用するとさらに多くの問題があります)。したがって、これらすべての部分を書き直すよりも簡単な何らかの解決策が必要です。 ...
ところで:これらすべての「再宣言」のスコープを変更する簡単な方法があります。これは、それらすべての前に次のようなマクロがあるためです。
MY_MACRO long HaveEventIterated_=0;
そしてatmでコンパイルします-DMY_MACRO=
すっごく誰か?:)