首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于这个C++错误,"permute_append.cpp:(.text+0x0)“中的"(.text+0x0)”是什么意思?

对于这个C++错误,"permute_append.cpp:(.text+0x0)“中的"(.text+0x0)”是什么意思?
EN

Stack Overflow用户
提问于 2011-11-05 07:00:21
回答 2查看 749关注 0票数 0

我有这个错误:

代码语言:javascript
复制
permute_append.o: In function `CISP430_A5::charList_join(char const*, CISP430_A5::linked_list<char>)':
permute_append.cpp:(.text+0x0): multiple definition of `CISP430_A5::charList_join(char const*, CISP430_A5::linked_list<char>)'
main.o:main.cpp:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [main] Error 1

(.text+0x0)是什么意思?我习惯于看到行:列号(例如57:68),但我不知道(.text+0x0)是什么意思。

下面是代码:https://gist.github.com/1340872/e25ec2aaac99c4005f4b33e6236750a2a6f1791f

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 07:01:58

这意味着错误是在链接期间报告的,而不是在编译过程中报告的。

链接错误是在对象模块的最开始时报告的(我猜是在它向.text段发出第一个数据之前)。

简而言之:这在这里是无关紧要的,但其他链接器错误可能会引用到,例如使用未解析外部的地方。多个定义显然出现在多个位置,这显然是链接器无法决定报告哪个位置的原因。

提示当在头文件而不是cpp文件中定义非泛型非实例方法(在本例中为CISP430_A5::charList_join)时,99%的情况下会发生这种情况。该方法是静态方法吗?

编辑实际上,问题是该方法是在中定义的。linked_list.h 的第201行包含 linked_list.template,这意味着包含来自linked_list.template的所有定义。实际上,这等同于将定义直接放在头文件中。

现在,因为

main.cpppermute_append.cpp 中都包含

  • linked_list.h
  • main.opermute_append.o都链接到main可执行文件

您最终会得到全局自由函数charList_join的两个相互冲突的定义。我修复了一些东西并上传到了my gist

票数 5
EN

Stack Overflow用户

发布于 2011-11-05 07:06:04

.text是包含可执行指令的段(在对象、库或可执行文件中或在内存中)。在.text+0x0中,0x0只是一个偏移量。因此,整个permute_append.cpp:(.text+0x0)表示通过编译permute_append.cpp创建的目标文件中文本段的开始(即字节0x0)。

由于这是一个链接错误,对您来说真正重要的是给定的符号名称,即CISP430_A5::charList_join(char const*, CISP430_A5::linked_list<char>)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8016696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档