当前位置: 首页 > backend >正文

记录一次ubuntu20.04 解决gmock not found问题的过程

在电脑上源码编译moveit,系统是ubuntu20.04,有三个电脑,分别叫做A,B,C好了,A和C都可以很顺畅地走流程编译通过,但是B遇到了gmock not found的问题,一开始没当回事,感觉重装下库,或者手动装一下就能解决,但是解决的过程还是走了一些弯路的,在这里记录一下。问题应该是由于之前手动安装的google-test可能没有开启gmock部分的编译安装?最后也不确定,先说一下最终的解决办法吧。

1. 使用到gmock报错的代码

在这里插入图片描述
这里会先使用add_rostest_gmock来生成一个测试的东西,然后把一些其他的库链到这个东西上面,但是会报错说找不到链接的目标,其实也就是生成的这个测试的文件

2. 最终办法

2.1 使用fdfind看一下电脑A和电脑B中和gmock有关的文件

这里需要进入到系统的根目录下,使用fdfind来看下系统中有哪些和gmock有关的文件,因为anaconda3其实也会有很多gmock等等的测试相关的库,但是我的这个编译和conda环境无关,所以需要使用grep管道来筛选掉一些我不需要看到的包含gmock关键字的文件,最终的命令和命令输出的结果如下所示,下面首先是电脑A(可以正常编译)的电脑的输出结果

fd gmock | grep -vE 'media|anaconda3|Downloads|Documents'
usr/src/gmock
usr/src/googletest/googlemock/src/gmock-spec-builders.cc
usr/src/googletest/googlemock/cmake/gmock_main.pc.in
usr/src/googletest/googlemock/src/gmock-matchers.cc
usr/src/googletest/googlemock/src/gmock-cardinalities.cc
usr/src/googletest/googlemock/src/gmock-all.cc
usr/src/googletest/googlemock/src/gmock-internal-utils.cc
usr/src/googletest/googlemock/src/gmock_main.cc
usr/src/googletest/googlemock/docs/gmock_faq.md
usr/src/googletest/googlemock/src/gmock.cc
usr/src/googletest/googlemock/cmake/gmock.pc.in
usr/src/googletest/googlemock/scripts/gmock-config.in
usr/src/googletest/googlemock/scripts/upload_gmock.py
usr/src/googletest/googlemock/scripts/fuse_gmock_files.py
usr/src/googletest/googlemock/scripts/gmock_doctor.py
usr/src/googletest/googlemock/test/gmock-pp-string_test.cc
usr/src/googletest/googlemock/test/gmock-nice-strict_test.cc
usr/src/googletest/googlemock/test/gmock-cardinalities_test.cc
usr/src/googletest/googlemock/test/gmock-generated-function-mockers_test.cc
usr/src/googletest/googlemock/test/gmock-spec-builders_test.cc
usr/src/googletest/googlemock/test/gmock_leak_test.py
usr/src/googletest/googlemock/test/gmock-function-mocker_nc_test.py
usr/src/googletest/googlemock/test/gmock-generated-matchers_test.cc
usr/src/googletest/googlemock/test/gmock_output_test.py
usr/src/googletest/googlemock/test/gmock-function-mocker_test.cc
usr/src/googletest/googlemock/test/gmock-actions_test.cc
usr/src/googletest/googlemock/test/gmock_test.cc
usr/src/googletest/googlemock/test/gmock_output_test_.cc
usr/src/googletest/googlemock/test/gmock-pp_test.cc
usr/src/googletest/googlemock/test/gmock_link_test.cc
usr/src/googletest/googlemock/test/gmock_leak_test_.cc
usr/src/googletest/googlemock/include/gmock
usr/src/googletest/googlemock/test/gmock_output_test_golden.txt
usr/src/googletest/googlemock/test/gmock_link2_test.cc
usr/src/googletest/googlemock/test/gmock-more-actions_test.cc
usr/src/googletest/googlemock/test/gmock_ex_test.cc
usr/src/googletest/googlemock/test/gmock-function-mocker_nc.cc
usr/src/googletest/googlemock/test/gmock-internal-utils_test.cc
usr/src/googletest/googlemock/test/gmock-generated-actions_test.cc
usr/src/googletest/googlemock/test/gmock-matchers_test.cc
usr/src/googletest/googlemock/test/gmock_stress_test.cc
usr/src/googletest/googlemock/test/gmock_test_utils.py
usr/src/googletest/googlemock/test/gmock_link_test.h
usr/src/googletest/googlemock/test/gmock-port_test.cc
usr/src/googletest/googlemock/test/gmock_all_test.cc
usr/src/googletest/googlemock/scripts/generator/gmock_gen.py
usr/src/googletest/googlemock/scripts/generator/gmock_gen
usr/src/googletest/googlemock/include/gmock/gmock-function-mocker.h
usr/src/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h
usr/src/googletest/googlemock/include/gmock/gmock-generated-actions.h
usr/src/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump
usr/src/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump
usr/src/googletest/googlemock/include/gmock/gmock-generated-matchers.h
usr/src/googletest/googlemock/include/gmock/gmock-actions.h
usr/src/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump
usr/src/googletest/googlemock/include/gmock/gmock-cardinalities.h
usr/src/googletest/googlemock/include/gmock/gmock-matchers.h
usr/src/googletest/googlemock/include/gmock/gmock-nice-strict.h
usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h
usr/src/googletest/googlemock/include/gmock/gmock-more-matchers.h
usr/src/googletest/googlemock/include/gmock/gmock-more-actions.h
usr/src/googletest/googlemock/include/gmock/gmock.h
usr/share/cmake-3.16/Help/release/dev/FindGTest-target-for-gmock.rst
usr/src/googletest/googlemock/scripts/generator/cpp/gmock_class.py
usr/src/googletest/googlemock/scripts/generator/cpp/gmock_class_test.py
usr/src/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
usr/src/googletest/googlemock/include/gmock/internal/gmock-pp.h
usr/src/googletest/googlemock/include/gmock/internal/gmock-port.h
usr/src/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h
usr/src/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump
usr/src/googletest/googlemock/include/gmock/internal/custom/gmock-matchers.h
usr/src/googletest/googlemock/include/gmock/internal/custom/gmock-port.h

这里面其实可以看到,和gmock有关的文件基本上都是在usr/src目录下的,那其实已经基本能够断定这个电脑的gmock并非是手动安装的,而是使用apt在安装某些库的时候为我们安装到/usr/src目录下的,因为我们手动安装的文件其实往往在/usr/local目录下,为了更进一步地进行确认,我们使用下面的命令:

dpkg -S /usr/src/googletest/googlemock

输出结果

> dpkg -S /usr/src/googletest/googlemock
googletest: /usr/src/googletest/googlemock

所以其实是apt安装的googletest这个库在包含了gmock

然后就是看一下电脑A现在已经安装的google或者是gmock的库有哪些

> sudo apt list --installed| grep -E "google"WARNING: apt does not have a stable CLI interface. Use with caution in scripts.google-chrome-stable/now 138.0.7204.100-1 amd64 [installed,upgradable to: 139.0.7258.66-1]
google-mock/focal,now 1.10.0-2 amd64 [installed,automatic]
googletest/focal,focal,now 1.10.0-2 all [installed,automatic]
> sudo apt list --installed| grep -E "mock"WARNING: apt does not have a stable CLI interface. Use with caution in scripts.google-mock/focal,now 1.10.0-2 amd64 [installed,automatic]

发现其实没有一些乱起八糟的lib dev库啥的,就是这几个库,然后就是在电脑B上面同样的走一遍,看一下每一个环节不一致的地方,把没有用到的库删了,把用到了但是安装路径不一致的库删了,把这几个关键的库也purge掉都重新装一遍,具体解决的过程如下所示,最后就好用了。

有问题的电脑B的排查过程

就是还是用上面的那些命令,来对比区别
在使用命令fd gmock | grep -vE 'media|anaconda3|Downloads|Documents'的时候,输出的结果是:

> fd gmock | grep -vE 'anaconda3|Downloads|Documents'
usr/src/gmock
home/tipriest/gmock_test
usr/include/gmock
home/tipriest/gmock_test/gmock_gtest_test.cpp
usr/include/gmock/gmock-cardinalities.h
usr/include/gmock/gmock-spec-builders.h
usr/include/gmock/gmock-more-actions.h
usr/include/gmock/gmock-actions.h
usr/include/gmock/gmock-matchers.h
usr/include/gmock/gmock-more-matchers.h
usr/include/gmock/gmock.h
usr/include/gmock/gmock-generated-matchers.h
usr/include/gmock/gmock-generated-actions.h
usr/include/gmock/gmock-generated-function-mockers.h
usr/include/gmock/gmock-function-mocker.h
usr/include/gmock/gmock-generated-function-mockers.h.pump
usr/include/gmock/gmock-generated-matchers.h.pump
usr/include/gmock/gmock-generated-actions.h.pump
usr/include/gmock/gmock-nice-strict.h
usr/share/doc/libgmock-dev
usr/lib/x86_64-linux-gnu/libgmock.a
usr/lib/x86_64-linux-gnu/libgmock_main.a
usr/lib/x86_64-linux-gnu/pkgconfig/gmock.pc
usr/lib/x86_64-linux-gnu/pkgconfig/gmock_main.pc
usr/share/lintian/overrides/libgmock-dev
var/lib/dpkg/info/libgmock-dev:amd64.list
var/lib/dpkg/info/libgmock-dev:amd64.md5sums
usr/include/gmock/internal/gmock-pp.h
usr/include/gmock/internal/gmock-port.h
usr/include/gmock/internal/gmock-internal-utils.h
usr/include/gmock/internal/custom/gmock-matchers.h
usr/include/gmock/internal/custom/gmock-port.h
usr/include/gmock/internal/custom/gmock-generated-actions.h
usr/include/gmock/internal/custom/gmock-generated-actions.h.pump
usr/share/cmake-3.16/Help/release/dev/FindGTest-target-for-gmock.rst

很明显和之前的电脑A输出的结果有很大区别,所以将包删掉重新装

> sudo apt list --installed| grep -E "google"WARNING: apt does not have a stable CLI interface. Use with caution in scripts.google-chrome-stable/now 138.0.7204.92-1 amd64 [installed,local]
google-mock/focal,now 1.10.0-2 amd64 [installed]
googletest/focal,focal,now 1.10.0-2 all [installed,automatic]
libgoogle-glog-dev/focal,now 0.4.0-1build1 amd64 [installed]
libgoogle-glog0v5/focal,now 0.4.0-1build1 amd64 [installed,automatic]
> sudo apt purge google-mock googletest libgoogle-glog-dev libgoogle-glog0v5

安装的过程删掉了很多和ROS相关的组件,在删除完成后使用下面的命令在进行安装的时候,又帮忙把google-mock googletest libgtest-dev啥的给装回来了,就很方便

> sudo apt install ros-noetic-desktop-full
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:evemu-tools evtest joystick libasound2-dev libcaca-dev libevemu3 libomp-dev libpulse-dev libsdl-image1.2-dev libsdl1.2-dev libslang2-dev libspnav-dev liburdfdom-tools nvidia-firmware-535-535.183.01 python-enum34python-numpy python-pkg-resources python3-bs4 python3-html5lib python3-lxml python3-pyassimp python3-soupsieve python3-webencodings ros-noetic-eigen-stl-containers ros-noetic-librealsense2 ros-noetic-random-numbersros-noetic-ruckig
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:google-mock googletest libgtest-dev ros-noetic-actionlib ros-noetic-actionlib-msgs ros-noetic-actionlib-tutorials ros-noetic-bond ros-noetic-bond-core ros-noetic-bondcpp ros-noetic-bondpy ros-noetic-camera-calibrationros-noetic-camera-calibration-parsers ros-noetic-camera-info-manager ros-noetic-catkin ros-noetic-common-msgs ros-noetic-common-tutorials ros-noetic-compressed-depth-image-transport ros-noetic-compressed-image-transportros-noetic-control-msgs ros-noetic-control-toolbox ros-noetic-controller-interface ros-noetic-controller-manager ros-noetic-controller-manager-msgs ros-noetic-cv-bridge ros-noetic-depth-image-proc ros-noetic-desktopros-noetic-diagnostic-aggregator ros

最终再次使用下面的命令观察gmock存在的文件夹的时候,就看到了和电脑A一致的结果,随后再编译就正常通过了

> fd gmock | grep -vE 'anaconda3|Downloads|Documents'
usr/src/gmock
home/tipriest/gmock_test
home/tipriest/gmock_test/gmock_gtest_test.cpp
usr/src/googletest/googlemock/cmake/gmock_main.pc.in
usr/src/googletest/googlemock/cmake/gmock.pc.in
usr/src/googletest/googlemock/docs/gmock_faq.md
usr/src/googletest/googlemock/include/gmock
usr/src/googletest/googlemock/src/gmock-spec-builders.cc
usr/src/googletest/googlemock/src/gmock-cardinalities.cc
usr/src/googletest/googlemock/src/gmock-all.cc
usr/src/googletest/googlemock/scripts/gmock-config.in
usr/src/googletest/googlemock/scripts/upload_gmock.py
usr/src/googletest/googlemock/scripts/fuse_gmock_files.py
usr/src/googletest/googlemock/scripts/gmock_doctor.py
usr/src/googletest/googlemock/test/gmock_ex_test.cc
usr/src/googletest/googlemock/test/gmock-spec-builders_test.cc
usr/src/googletest/googlemock/test/gmock-generated-actions_test.cc
usr/src/googletest/googlemock/test/gmock_leak_test_.cc
usr/src/googletest/googlemock/test/gmock_all_test.cc
usr/src/googletest/googlemock/test/gmock-cardinalities_test.cc
http://www.xdnf.cn/news/17300.html

相关文章:

  • Python如何合并两个Excel文件
  • Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性
  • SVN下载及安装(保姆级别)
  • 【华为机试】55. 跳跃游戏
  • SARSA算法详解:从实践到理论的全面解析
  • 小程序难调的组件
  • 疯狂星期四文案网第33天运营日记
  • GDB中thread apply all命令使用指南
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • AI赋能品牌出海,特区典范引领未来 第十九届中国品牌节·国际品牌博览会在深开幕
  • FreeRTOS---基础知识5
  • 灰狼算法+四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测
  • 《汇编语言:基于X86处理器》第12章 浮点数处理与指令编码(2)
  • 支持向量机(SVM)全解析:原理、类别与实践
  • 贪心(set维护)
  • Agent 开发进阶路线:从基础功能到自主决策
  • AcWing 6478. 谁进线下了?III
  • 【深度学习】动手深度学习PyTorch版——安装书本附带的环境和代码(Windows11)
  • 前端后端之争?JavaScript和Java的特性与应用场景解析
  • Spring Boot 结合 CORS 解决前端跨域问题
  • ctfshow_萌新web9-web15-----rce
  • 腾讯前端面试真题
  • svm的一些应用
  • Prometheus 通过读取文件中的配置来监控目标
  • MyBatis流式查询详解
  • 系统构成与 Shell 核心:从零认识操作系统的心脏与外壳
  • 机器学习-Logistic Regression
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘transformers’问题
  • AJAX与axios框架
  • 【轮速传感器方向判断原理】