"multiple definition" 的 googletest 符号仅在使用 gradle 在 Travis CI 上编译时

"multiple definition" of googletest symbols only when compiling on Travis CI with gradle

我正在尝试让 Travis CI 工作一些 CI。
所以我用 gtest 和 gradle 设置了一些测试。只有一个测试文件可以完美运行。但是,一旦我添加了第二个,我就会收到大量 multiple definition 错误。它们只是 gtest 符号。最奇怪的是,我无法在任何其他系统上重现这一点。我用 GCC7 尝试了本地 Ubuntu 机器,用 GCC6 尝试了 Debian,用 VS 2015 尝试了 Windows。

我对为什么会出现这些错误以及为什么它们只出现在 Travis CI.

上一无所知

构建日志:https://travis-ci.org/fivunlm/cppstreams/jobs/420067374
Repo(我正在处理的分支):https://github.com/fivunlm/cppstreams/tree/0a89e8f01c9f868a2d690780b2afe159627bd81e
构建文件:https://github.com/fivunlm/cppstreams/blob/0a89e8f01c9f868a2d690780b2afe159627bd81e/build.gradle

编辑:

主要问题是编译错误。不可再现性,只会让调试变得更加困难。

编辑 2:

我刚刚设法在我的 Ubuntu VM 上重新创建了它。不过这还是第一次。我将能够尝试第一手调试它。另外,我将能够回答更深入的问题。

事实证明,我错误地编译了 gtest。罪魁祸首是:https://github.com/fivunlm/cppstreams/blob/0a89e8f01c9f868a2d690780b2afe159627bd81e/lib/build.gradle#L16-L17

相反,它应该只是 include "src/gtest-all.cc"。该文件包括所有其他来源。

因此,如果您不确定您的 gtest 运行的原因,请确保您只编译 src/gtest-all.cc