2012-03-13 84 views
2

我花了相当多的时间试图获得基于expat的示例程序进行编译。在当前终端(debian)中无法识别的gcc新安装的库(libexpat1-dev)

我收到以下错误消息,当我试图编译

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安装外籍libexpat1 libexpat1-dev的libxmltok1-dev的

所以我搞砸了很多年,试图让错误信息消失,所以我可以编译这个(简单的)小程序,但无济于事。

最终,出于绝对的随机性,我决定切换到虚拟终端。

我运行完全相同的命令,这次它工作没有问题。

谁能告诉我这是为什么?有什么我需要运行,以刷新库路径?

+0

尝试在包含main的文件名后给出链接器标志,例如:gcc line.c -lexpat – Aftnix 2012-05-09 09:47:08

回答

4

链接器行(即您给出的标记-l和您的输入文件名)是依赖于顺序的。库仅用于定义在左侧使用的功能,但不在右侧。使用:

gcc -Wall line.c -lexpat -o blah 

查看问题library is linked but reference is undefined了解更多信息。