链接 GoogleTest 和 CodeBlocks

Posted

技术标签:

【中文标题】链接 GoogleTest 和 CodeBlocks【英文标题】:Linking GoogleTest and CodeBlocks 【发布时间】:2016-07-12 09:13:21 【问题描述】:

恐怕这是一个基本问题,我可能在其他 IDE 中找到了答案,但在 CodeBlocks 中找不到 =(

我尝试使用 GoogleTest。我下载了项目,使用 cmake -G "CodeBlocks - Unix Makefiles" 构建它(我在 Ubuntu 上)

这给了我在 /usr/lib 中传输的 libgtest.a 和 libgtest_main.a 文件

我认为我的不足在于最后一步:。一些教程告诉添加“-lgtest”链接器选项,我尝试了很多东西,但都是一样的:当我尝试编译我的#include“gtest/gtest.h”时返回致命错误“没有这样的文件或目录”。

你能帮助我可怜的灵魂吗?

【问题讨论】:

【参考方案1】:

不要将自己构建的文件放在/usr/... 下 除非你把它们放在/usr/local/... 下。其余的/usr/... 由您的 Linux 发行版保留,应该由您的包管理器专门填充。如果你在包管理器背后捣乱, 您可能会破坏包裹并遭受任何痛苦。

首先从/usr/lib 中删除libgtest.alibgtest_main.a

您已经下载了googletest 并首先在某个目录中构建了它 在该目录中运行CMake,然后运行make

完成后,在您运行 make 的同一目录中,运行:

sudo make install

这将在/usr/local/lib 中安装所有gmock / gtest 库。 它将在/usr/local/include/gmock 中安装gmock 头文件并安装 /usr/local/include/gtest 中的 gtest 头文件。去那里检查一下。

/usr/local/...属于,无论你在那里做什么都不会干扰 使用包管理器。

接下来,要在您的单元测试程序中使用googletest,您可能需要执行以下操作 6件事:

1: #include <gtest/gtest.h> 适用于您的源文件。 (笔记: <gtest/gtest.h>,并没有什么不同)。

2:告诉编译器哪个目录包含gtest/gtest.h,除非 它是编译器的默认搜索目录之一。要做到这一点,你会 将选项 -I/usr/local/include 传递给 g++ 以编译源文件。但你不需要 这样做,因为/usr/local/include 编译器的默认搜索之一 目录。

3:告诉链接器您要链接libgtest.a。要做到这一点,你 将选项-lgtest 传递给g++ 以链接程序。

4:告诉链接器哪个目录包含libgest.a,除非 它是链接器的默认搜索目录之一。要做到这一点,你会 将选项-L/usr/local/lib 传递给g++ 以链接程序。但你不需要 这样做,因为/usr/local/lib 链接器的默认搜索之一 目录。

5:告诉编译器生成线程安全代码。 (为什么?因为默认情况下, libgest 是一个多线程库。如果你可以构建它单线程 想要,但我假设你没有。)为此,你传递选项-pthreadg++编译源文件。

6:告诉链接器链接一个多线程可执行文件。为此,您通过选项 -pthreadg++ 用于链接程序。 (是的,-pthread 用于编译和 -pthread 再次链接)。

所以在实践中您只需要执行 1356

1 无需进一步解释。其余的需要你设置你的 Code::Blocks 项目 构建选项 正确,以便它们生成正确的g++ ... 命令用于编译和 链接。

看起来你已经获得了 3 权利:在 Build options... -> Linker settings -> 其他链接器选项,添加行:-lgtest

对于5,在构建选项... -> 编译器设置 -> 其他编译器选项,添加行:-pthread

对于 6,在 构建选项... -> 链接器设置 -> 其他链接器选项,添加另一行:-pthread, 在-lgtest之后。

就是这样。保存这些设置后,您可以构建项目。如果有错误,您可以查看 构建日志选项卡(不是构建消息选项卡)下的构建日志以查看g++ ...的确切命令 为编译和链接而执行,如果您的设置为g++ 生成了正确的命令行选项。

【讨论】:

你是天使,现在完美运行。愿你的日子很长,你的夜晚很愉快。

以上是关于链接 GoogleTest 和 CodeBlocks的主要内容,如果未能解决你的问题,请参考以下文章

为 gcov 编译 googletest

函数定义在 cpp 文件中时的链接器错误

Google Test测试框架使用(Linux平台)

GoogleTest 之路2-Googletest 入门(Primer)

GoogleTest vs CppUnit:事实

googletest的安装和使用