gpt4 book ai didi

c++ - 奇怪的场景得到 g++ 错误函数的多重定义

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:51 25 4
gpt4 key购买 nike

我有已经可以运行的代码,但需要将其移植到另一个 Linux 平台。我总是不得不针对 gcc/g++ 差异调整代码 - 通常 g++ 的给定版本在其允许的范围内受到更多限制。

在这种情况下,我在一个非常简单的情况下遇到了多重函数定义错误 - 单个 cpp 文件中的单个全局函数被调用一次。我在最终的 g++ 链接行中没有看到任何重复的目标文件列表。源文件文本(通过搜索)或编译目标文件(使用 objdump -t)中没有重复项。事实上,该错误通过在对象中列出相同的偏移量来确认不存在真正的重复项:

实际链接错误:Simulation1.o:在函数 DoSimulation1(int, char**)' 中:
Simulation1.cpp:(.text+0x1800): 多重定义
DoSimulation1(int, char**)'Simulation1.o:Simulation1.cpp:(.text+0x1800): 首先在这里定义

注意两件奇怪的事情 - (1) 原始和拷贝都在 .text+0x1800 处,并且 (2) 它似乎在函数内部找到被调用函数的拷贝,但这不是递归函数并且它不会调用自己。

这是链接行:

g++ -O3 -std=c++11 CorrelatePCandFrequency.o CountBroadcasts.o CheckMemDependencies.o MathModel.o Histograms2.o EvalOddSetCaches2.o jDEQ.o ChipControl.o jSimplestCache.o WorkingSets.o EvalOddSetCaches3.o QuickAnal.o Simulation1.o copy.o ValidateTrailFile.o jCommon.o CountBroadcasts2.o jSimpleCache2.o BankConflicts.o ParsePTXTrace.o DynamicTrace.o copy.o Simulation1.o Histograms.o jExcel.o main.o jPreConditionedHintFile.o JVector.o jBitArray.o Ops.o -o sim

文件Simulation1.cpp中的单个函数定义:

bool DoSimulation1(int argc, char* argv[])
{
...
}

请注意,当我在 Simulation1.o 上执行 objdump -t 然后执行 c++filt 时,我得到了轻微的变化:

0000000000001800 g F.text 000000000000049b _Z13DoSimulation1iPPc

c++filt _Z13DoSimulation1iPPcDoSimulation1(int, char**)

所以如果有任何遗漏,可能是 char** 和 char* []) 之间的区别

同样,这在其他平台上编译得很好。此错误与:gcc 版本 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)

有什么想法吗?通常像这样的错误是由于将定义放入包含文件,或者具有奇怪的模板重载效果。这非常简单,因此它不会链接可执行文件。

谢谢- 杰夫

最佳答案

可能是因为您的链接命令中有两个 Simulation1.o

g++ -O3 -std=c++11 CorrelatePCandFrequency.o CountBroadcasts.o CheckMemDependencies.o MathModel.o Histograms2.o EvalOddSetCaches2.o jDEQ.o ChipControl.o jSimplestCache.o WorkingSets.o EvalOddSetCaches3.o QuickAnal.o Simulation1.o copy.o ValidateTrailFile.o jCommon.o CountBroadcasts2.o jSimpleCache2.o BankConflicts.o ParsePTXTrace.o DynamicTrace.o copy.o Simulation1.o Histograms.o jExcel.o main.o jPreConditionedHintFile.o JVector.o jBitArray.o Ops.o -o sim

(copy.o好像也被复制了)

关于c++ - 奇怪的场景得到 g++ 错误函数的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com