2009-05-17 28 views
14

Unixでは、私は3つのメインファイルを持っています。それらの1つはライブラリであり、もう1つはプログラムです。C言語でのextern変数のリンク

  • MyLib.cおよびMyLib.hはライブラリーである。
  • main.cはプログラムです。

MyLib.h私は宣言(extern int Variable;)を持っています。 main.cVariableを使用しようとするとできません。もちろん、私はMyLib.cmain.cMyLib.hを入れました。私もそれらをリンクしています。とにかく変数はmain.cで認識されません。私はプログラムをリンクする際

にはどうすれば利用できる変数を得るのですか?

+0

源とエラーを投稿してください。 。特に、main.cをビルドすることができないときにどのようにリンクを管理しましたか? – Macker

+0

私はmain.cを上回っていました。私はコンパイラとリンカの仕組みを理解するために3倍の努力をしていました。しかしクリス・ルッツの答えはうまくいった。ありがとう。 –

答えて

29

Variableはどこかに定義する必要があります。私はそれをMyLib.cのグローバル変数として宣言し、main.cexternと宣言します。何が起こっている

MyLib.cmain.cの両方のために、コンパイラはVariableは、存在し、intであると言われている、ということですが、それはどこか別の場所(extern)だという。これは問題ありませんが、実際に別の場所になければならず、リンカーがすべてのファイルをリンクしようとすると、実際にどこにでもあるVariableが見つからないため、存在しません。

はこれを試してみてください:

MyLib.c:

int Variable; 

MyLib.h:

extern int Variable; 

のmain.c:

#include "MyLib.h" 

int main(void) 
{ 
    Variable = 10; 
    printf("%d\n", Variable); 
    return 0; 
} 
+0

ありがとう、私はちょうど理解した。 –

+0

問題ありません。コンパイルの多くの段階は最初はかなり混乱するかもしれません。 –

+0

@Chris Lutz良い説明。あなたのために1+ – mahesh

関連する問題