- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
undefined reference to 问题解决方 2012-03-07 20:1319462人阅读评论(9)收藏举报? 最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13):?undefined?reference?to?`func???? 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1.? 链接时缺失了相关目标文件(.o)????测试代码如下:???? 然后编译。gcc?-c?test.c ?gcc?–c?main.c???? 得到两个 .o 文件,一个是 main.o,一个是 test.o ,然后我们链接 .o 得到可执行程序:gcc?-o?main?main.o???? 这时,你会发现,报错了:main.o:?In?function?`main: ?main.c:(.text+0x7):?undefined?reference?to?`test ?collect2:?ld?returned?1?exit?status???? 这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包含了test()函数的实现,所以如果按下面这种方式链接就没事了。gcc?-o?main?main.o?test.o??? 【扩展】:其实上面为了让大家更加清楚底层原因,我把编译链接分开了,下面这样编译也会报undefined reference错,其实底层原因与上面是一样的。gcc?-o?main?main.c?//缺少test()的实现文件?需要改成如下形式才能成功,将test()函数的实现文件一起编译。gcc?-o?main?main.c?test.c?//ok,没问题了?2.??? 链接时缺少相关的库文件(.a/.so)????在此,只举个静态库的例子,假设源码如下。??? 先把test.c编译成静态库(.a)文件gcc?-c?test.c ?ar?-rc?test.a?test.o???? 至此,我们得到了test.a文件。我们开始编译main.cgcc?-c?main.c???? 这时,则生成了main.o文件,然后我们再通过如下命令进行链接希望得到可执行程序。gcc?-o?main?main.o???? 你会发现,编译器报错了:/tmp/ccCPA13l.o:?In?function?`main: ?main.c:(.text+0x7):?undefined?reference?to?`test ?collect2:?ld?returned?1?exit?status???? 其根本原因也是找不到test()函数的实现文件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。gcc?-o?main?main.o?./test.a??//注:./?是给出了test.a的路径????? 【扩展】:同样,为了把问题说清楚,上面我们把代码的编译链接分开了,如果希望一次性生成可执行程序,则可以对main.c和test.a执行如下命令。gcc?-o?main?main.c?./test.a??//同样,如果不加test.a也会报错?3.??? 链接的库文件中又使用了另一个库文件??? 这种问题比较隐蔽,也是我最近遇到的与网上大家讨论的不同的问题,举例说明如下,首先,还是看看测试代码。??? 从上图可以看出,main.c调用了test.c的函数,test.c中又调用了fun.c的函数。??? 首先,我们先对fun.c,test.c,main.c进行编译,生成 .o文件。gcc?-c?func.c ?gcc?-c?test.c ?gcc?-c?main.c???? 然后,将test.c和func.c各自打包成为静态库文件。ar?–rc?func.a?func.o ?ar?–rc?test.a?test.o???? 这时,我们准备将main.o链接为可执行程序,由于我们的main.c中包含了对test()的调用,因此,应该在链接时将test.a作为我们的库文件,链接命令如下。gcc?-o?main?main.o?test.a???? 这时,编译器仍然会报错,如下:test.a(test.o):?In?function?`test: ?test.c:(.text+0x13):?undefined?reference?to?`func ?collect2:?ld?returned?1?exit?status???? 就是说
您可能关注的文档
- UML示例图扫盲.docx
- UML项目管理背.doc
- UM_pp08_mastercreate.doc
- UM_SD_100退货处理业务V10.doc
- unaico银行编码.doc
- UnderstandingandManagingInformalGroups.doc
- Understanding_the_Linux_2681_CPU_Scheduler(中文翻译).doc
- UnderstandingtheUSFederalCourts.doc
- Unicode与Ansi的混合编程.doc
- UMSD1120维护发货订单.doc
- 2025年土木工程师《工程测量与施工技术》备考题库及答案解析.docx
- 2025年糖尿病科技师糖尿病护理与健康教育知识考核模拟题答案及解析.docx
- 物业公司年度工作总结(15篇).doc
- 2025年外科术前术后护理要点考核试题及答案解析.docx
- 2025年注册监理工程师职业资格考试《工程质量验收》备考题库及答案解析.docx
- 互联网广告推广计划.docx
- 2025年新青岛版(六三制)六年级上册科学全册精编知识点(复习用).pdf
- 2025年室内设计师职业资格考试《建筑装潢结构及材料》备考题库及答案解析.docx
- 2025年酒店经营管理师《酒店运营与管理》备考题库及答案解析.docx
- 2025年人力资源开发师《培训设计与评估》备考题库及答案解析.docx
最近下载
- 《九年级学生数学典型错题的成因及对策研究》实施方案.docx
- 建设工程施工专业分包合同示范文本GF-2003-0213.pdf VIP
- 变废为宝演绎精彩——初中数学易错题归因之我见 .pdf VIP
- 个人纪律作风自查报告.docx VIP
- 错题归因法解析(中小学生教育).pptx VIP
- 城市地铁车辆车钩缓冲装置行业技术规范 - 中国城市轨道交通协会.pdf VIP
- 537初中数学学生的典型错题成因及防范措施的研究的结题报告.pptx VIP
- CNCA-CURC-07:2019 城市轨道交通装备产品认证实施规则 特定要求—城市轨道交通车辆车钩缓冲装置.pdf VIP
- 校园流感防控技术操作指南(简易版、完整版)说明书.pdf
- LD350变频器说明书V2.0.pdf VIP
原创力文档


文档评论(0)