2012-03-13 10 views
2

私はexpatベースのサンプルプログラムをコンパイルするのにかなり時間を費やしました。gccの新しくインストールされたライブラリ(libexpat1-dev)が現在の端末(debian)で認識されない

私は

gcc -Wall -lexpat line.c -o blah 
line.c: In function ‘main’: 
line.c:99:8: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘XML_Size’ [-Wformat] 
/tmp/ccUa3vfD.o: In function `printcurrent': 
line.c:(.text+0x42): undefined reference to `XML_SetDefaultHandler' 
line.c:(.text+0x4d): undefined reference to `XML_DefaultCurrent' 
line.c:(.text+0x60): undefined reference to `XML_SetDefaultHandler' 
/tmp/ccUa3vfD.o: In function `main': 
line.c:(.text+0x162): undefined reference to `XML_ParserCreate' 
line.c:(.text+0x1ad): undefined reference to `XML_UseParserAsHandlerArg' 
line.c:(.text+0x1c9): undefined reference to `XML_SetElementHandler' 
line.c:(.text+0x1dd): undefined reference to `XML_SetCharacterDataHandler' 
line.c:(.text+0x1f1): undefined reference to `XML_SetProcessingInstructionHandler' 
line.c:(.text+0x2b2): undefined reference to `XML_Parse' 
line.c:(.text+0x2c2): undefined reference to `XML_GetErrorCode' 
line.c:(.text+0x2ca): undefined reference to `XML_ErrorString' 
line.c:(.text+0x2d8): undefined reference to `XML_GetCurrentLineNumber' 
collect2: ld returned 1 exit status 

をコンパイルしようとしたとき、私はすでに次のコマンドを実行していた次のエラーメッセージを受信した 須藤はapt-getのインストールのexpatます:libexpat1のあります:libexpat1-devのlibxmltok1-devの

ので、私は年を重ねていたので、エラーメッセージが消えるようにしようとしていたので、この(単純な)小さなプログラムをコンパイルすることはできましたが、役に立たなかったのです。

結局のところ、まったく無作為なことから、私は仮想端末に切り替えることにしました。

私はまったく同じコマンドを実行しましたが、今回は問題なく動作しました。

これは誰に教えてもらえますか?ライブラリパスをリフレッシュするために実行する必要があるものはありますか?

+0

mainのようなファイル名の後ろにリンカーフラグを付けてみてください:gcc line.c -lexpat – Aftnix

答えて

4

リンカー行(つまり、-lというフラグと入力ファイル名)は、順序に依存します。ライブラリは、左側で使用される関数を定義するためにのみ使用されますが、右側では使用されません。用途:

gcc -Wall line.c -lexpat -o blah 

は、より多くの情報のために質問library is linked but reference is undefinedを参照してください。

関連する問題