2

Linux で次のエラーが発生しています__line____LINE____line____LINE__

extern int __line__;
LDF(__line__ = __LINE__);

の値が割り当てられている__line__ここではマクロではない変数です__LINE__。ここにあるextern intので、ただのようにどこかに宣言されているはずint __line__です。しかし、_ line _is が宣言されているヘッダーまたは c ファイルが表示されません。また、このエラーは、.c ファイルのコンパイル中ではなく、.o ファイルのリンク中に発生します。

このエラーは UNIX では発生しません。さらに、libgen をリンクすると、libposix4 ライブラリがリンクされます。これらのライブラリは UNIX にのみ存在し、LINUX にint __line__;は存在しません。これらのライブラリのどこかに存在すると思いますが、このエラーを解決するにはどうすればよいですか?

4

3 に答える 3

1

@rodrigo @sehe。ご意見ありがとうございます。行 int line =0;が見つかりました。「.c」ファイルの 1 つで、そのファイルのそのオブジェクトが作成され、いくつかのオブジェクト ファイルとともにアーカイブ ファイル「.a」ライブラリ ファイルが作成されます。つまり、common.c には int line = 0;があります。コマンド「ar ruv」を使用して「libcommon.a」を作成するために、common.o といくつかの xo、yo がアーカイブされます。このライブラリはリンクされ、makefile で -lcommon としてバイナリ実行可能ファイルを作成します。再びあなたの入力に感謝します!!!!

于 2012-05-07T18:27:50.493 に答える
0

__line__残念ながら、標準ではポータブル識別子として禁止されています。

UNIXで「機能」したという事実は実装で定義されており、移植性がないという事実を目の当たりにしています。

私の唯一のアドバイスは、その変数の名前を変更することです。火遊びをして、コンパイルフラグに本当に邪悪なものを追加することができます。

-D__line__=MYCODEBASE_LINE__

でもそんなことは特にお勧めしません

于 2012-05-02T22:02:06.637 に答える
0

おそらく、使用されているライブラリの一部にたまたまある非標準の、文書化されていない内部変数です。

そして、賢い人があなたのプログラムでそれを使用することを発見しました。Linux には単に存在しない可能性があるため、なぜそこにあるのか、本当に必要なのかを理解しようとする必要があります。

その名前が予約されているため、二重のアンダースコアで始まります。

于 2012-05-03T00:36:19.000 に答える