c++ - 为什么用项目编译 gtest 而不是使用 lib

标签 c++ compilation linker googletest

Google test documentation解释说 gtest 必须与项目一起编译,而不是使用具有 lib 和 header 的标准方法。他们解释说使用 lib 可能与“一个定义规则”冲突。我觉得这个解释很奇怪,因为这是你使用任何其他库的方式,而且它们与“一个定义规则”不冲突

最佳答案

Google Test 有许多控制其行为的设置,超出了通常的调试/发布和 32 位/64 位设置。例如,它可以使用 tuple从 C++11 标准 ( <tuple> )、早期 TR1 ( <tr1/tuple> ) 中指定的位置开始,或者根据平台(即操作系统、编译器和标准库)支持的内容自行滚动.如果在二进制文件中编译的库部分配置为使用它自己的 tuple ,但是您#include 到代码中的部分尝试使用标准 <tuple>标题,你有麻烦了。 Google Test 的特殊之处在于它旨在实现非常广泛的平台兼容性,因此具有大量此类设置,从而为冲突创造了大量机会。事实上,在开发人员被犯下同样错误的人打来的大量支持电话淹没之后,调用了相关规则。

关于c++ - 为什么用项目编译 gtest 而不是使用 lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782026/

相关文章:

C++——如何重载运算符+=?

c++ - 如何为一系列整数值专门化 C++ 模板?

c++ - 如何访问 boost 子图 'graph' 属性?

c++ - 将 cmake 与 Code::Blocks 一起使用

c++ - 在模板类中重载运算符 <<

makefile - 子项目的主 Makefile 不会编译子项目

javascript - Typescript 内部模块 - 无法在同一模块中引用导出的类

c++ - 链接到好友功能时出错

c - 将 MASM 对象与 C 对象链接会给出错误的结果

c++ - "undefined reference to"在 Ubuntu 上链接