我花了相当多的时间试图编译一个基于外籍人士的示例程序。
当我尝试编译时收到以下错误消息
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
我已经运行了以下命令:
sudo apt-get install expat libexpat1 libexpat1-dev libxmltok1-dev
所以我折腾了很长时间,试图让错误消息消失,这样我就可以编译这个(简单的)小程序,但无济于事。
最终,出于纯粹的随机性,我决定切换到虚拟终端。
我运行了完全相同的命令,这次没有问题。
谁能告诉我这是为什么?我需要运行什么才能刷新库路径吗?
链接器行(即您给出的标志-l
和您的输入文件名)是依赖于顺序的。库仅用于定义左侧使用的函数,而不是右侧使用的函数。使用:
gcc -Wall line.c -lexpat -o blah
查看问题库已链接但引用未定义 https://stackoverflow.com/questions/7783345/library-is-linked-but-reference-is-undefined了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)