【发布时间】:2020-10-09 21:30:33
【问题描述】:
我遇到了一个非常奇怪的链接器问题,它在不同的场景中以不同的方式表现出来。不幸的是,我无法分享任何来源,所以这有点遥远,但我缺乏追查此事的想法。
我正在尝试为将在 Windows 环境中运行的项目构建单元测试(因此不包括硬件相关功能)。我们还构建了相同的单元测试,以便它们可以在我们的目标(Renesas PK-S5D9)上运行,因此使用不同的编译器,它是成功的。请注意,我们使用的是 gtest,它是作为源包含的,而不是作为库。此构建中不涉及任何库,只有源代码。
场景:
- 正在一个分支上完成工作。 Develop 已更新,因此开发人员合并到新的 HEAD 中。这样做后,一个不相关的测试开始无法链接;让我们称测试 ATest.cpp 和产品源 A.cpp/h。链接器抱怨在 Ah 中声明并由 ATest.cpp 使用的函数未定义,但是,A.cpp 的构建成功,.o 存在于预期的位置,并且 .o 在链接命令中列出。
- 我拿了分支的负责人并排除了从开发中合并带来的文件(一个类和一个测试),并得到了一个不同的错误。前一行的末尾包含文件“./product/adapters/ActionableProvider.o”,当 g++ 尝试访问它时,该文件看起来会被截断:
- 我从分支中获取了开发和零碎添加的内容(一些更改和一个带有测试的新类)。当我几乎完成它时,我遇到了与场景 2 中列出的类似的错误。我尝试注释掉类中实现的函数的所有内容,并且截断减少了:
增加怪异的东西:
当使用相同的工具集但在我们的构建服务器上运行时,开发人员观察到失败的提交不会失败(Windows 10 构建略有不同,也没有重度防病毒,因为它在我们的内部网络中被分段) .
欢迎任何想法导致更多尝试将这个谜团拼凑在一起!
【问题讨论】:
标签: gcc mingw linker-errors