链接 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.a
和libgtest_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
是一个多线程库。如果你可以构建它单线程
想要,但我假设你没有。)为此,你传递选项-pthread
到g++
编译源文件。
6:告诉链接器链接一个多线程可执行文件。为此,您通过选项
-pthread
到 g++
用于链接程序。 (是的,-pthread
用于编译和
-pthread
再次链接)。
所以在实践中您只需要执行 1、3、5 和 6。
1 无需进一步解释。其余的需要你设置你的 Code::Blocks 项目
构建选项 正确,以便它们生成正确的g++ ...
命令用于编译和
链接。
看起来你已经获得了 3 权利:在 Build options... -> Linker settings ->
其他链接器选项,添加行:-lgtest
对于5,在构建选项... -> 编译器设置 -> 其他编译器选项,添加行:-pthread
对于 6,在 构建选项... -> 链接器设置 -> 其他链接器选项,添加另一行:-pthread
,
在-lgtest
之后。
就是这样。保存这些设置后,您可以构建项目。如果有错误,您可以查看
构建日志选项卡(不是构建消息选项卡)下的构建日志以查看g++ ...
的确切命令
为编译和链接而执行,如果您的设置为g++
生成了正确的命令行选项。
【讨论】:
你是天使,现在完美运行。愿你的日子很长,你的夜晚很愉快。以上是关于链接 GoogleTest 和 CodeBlocks的主要内容,如果未能解决你的问题,请参考以下文章