如何创建Google test shared library(dll)和static library(lib),并编写测试用例

本文详细描述了如何从Github下载并使用CMake在VisualStudio2017环境中配置和构建GoogleTest库,以及如何编写和运行单元测试的过程。
  1. 从Github下载google test源码
  2. 确保本地安装Visual Studio和CMake GUI,本次测试使用VS2017及Cmake GUI 3.20.5
  3. 解压googletest-main,打开Cmake GUI,配置源码路径(googletest-main路径),和生成路径(googletest-main/build),需要在生成路径下创建"build"文件夹,记得检查一下MSVC编译器路径在环境变量目录中
  4. 点击"Configure"按钮,在弹出的对话框中,选择"Specify the generator for this project" 为Visual Studio 15 2017编译器,"Option platform for generator(if empty, generator uses: Win32)"为x64,这里生成64位版本库,其他保持默认设置
Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.19044.
The C compiler identification is MSVC 19.16.27045.0
The CXX compiler identification is MSVC 19.16.27045.0
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe - skipped
Detecting C compile features
Detecting C compile features - done
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe - skipped
Detecting CXX compile features
Detecting CXX compile features - done
Found Python3: D:/wecode_build_tools/mingw/bin/python3.8.exe (found version "3.8.2") found components: Interpreter 
Looking for pthread.h
Looking for pthread.h - not found
Found Threads: TRUE  
Configuring done

配置完毕后,在Configure上的选择框中,勾选"Build_SHRAED_LIBS",点击Configure按钮旁边的"Generate"按钮

Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.19044.
Configuring done
Generating done

生成完毕后,点击"Generate"按钮旁边的"Open Project"按钮,打开VS build项目,选择"Release"/“x64"进行ALL_BUILD”,生成完毕后,在“\googletest-main\build\bin\Release”目录下就会生成dll,在“、googletest-main\build\lib\Release”目录下生成lib,有了这些库,就可以创建GTest测试用例了,通常只需要"gtest/gtest_main"及"gmock/gmock_main"这4个dll/lib文件即可。

  1. 创建GTest测试用例:本次测试使用Visual Studio,使用CMake配合MinGW类型,只需要额外创建一个CMakeLists.txt即可。
    创建一个VS console app程序,将googletest-main\include\gtest目录拷贝至项目目录下,添加到项目include path,拷贝gtest/gtest_main lib到项目目录下,添加到项目link目录和项;编写func.h/func.cpp作为待测试API,编写func_test.cpp作为单元测试,编写main程序如下:
    main.cpp
#include "googletest/inc/gtest/gtest.h"

int main()
{
    std::cout << "Hello GTest!\n";

    ::testing::InitGoogleTest();
    return RUN_ALL_TESTS();
}

func_test.cpp

#include "googletest/inc/gtest/gtest.h"
#include "func.h"

TEST(func, add_test) {
    int a = 1, b = 2;
    int c = 3;
    ASSERT_EQ(c, add(a, b));
}

func.h

int add(int a, int b);

func.cpp

#include "func.h"

int add(int a, int b) {
    return a + b;
}

编译后,将gtest/gtest_main dll放在exe生成目录下,运行:

Hello GTest!
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from func
[ RUN      ] func.add_test
[       OK ] func.add_test (4607 ms)
[----------] 1 test from func (4608 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (4609 ms total)
[  PASSED  ] 1 test.

可以为不同的代码模块创建不同的测试用例,放在独立的test.cpp文件中,所有的用例都会执行。

1.我不觉得我们编译过程中,出现过磁盘不足的现象“系统:MSIMS-7D99 提交虚拟内存 可用虚拟内存 虚拟内存使用率 已用物理内存 可用物理内存 物理内存使用率 分页文件使用率 12,275 MB 22,379 MB 35.4 % 9,189 MB 23,417 MB 28.1 % 2.1 % 4,852 MB 7,954 MB 14.0 % 4.074 MB 7.109 MB 12.4 % 0.0 % 26,700 MB 29,802 MB 77.0 % 25,497 MB 28,532 MB 78.1 % 2.2 % 12,838 MB 21,816 MB 37.0 % 11,105 MB 21,501 MB 34.0 % 1.4 %” 2.我需要你把这个补全“【PyTorch 编译作战记录 - 最终方案】 * 最终诊断结论:编译成功,但运行时因系统未激活,可能缺少最新 API-MS-WIN-CORE-*.DLL 等虚拟依赖项的实现。 * 最终解决方案:采用静态链接(Static Linking)编译,将所有第三方依赖库打包进最终生成的.dll文件中,使其不依赖系统运行时环境。 * 核心环境变量设置: USE_STATIC_CUDNN = ON USE_STATIC_NCCL = ON USE_STATIC_OPENMP = ON BUILD_SHARED_LIBS = OFF CMAKE_EXE_LINKER_FLAGS = -static CMAKE_FIND_LIBRARY_SUFFIXES = .a;.lib * 编译命令:python setup.py develop * 验证命令:python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"”让下一个你,一看就知道我们做过什么,接下来应该做什么 3.我选择分析日志,但是你之前说“cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) cuda_distributions_test.cu cuda_distributions_test.cu cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) tmpxft_00004984_00000000-7_cuda_distributions_test.cudafe1.cpp [7098/7457] Building CUDA object caffe2\CMakeFiles\cuda_packedtensoraccessor_test.dir\__\aten\src\ATen\test\cuda_packedtensoraccessor_test.cu.obj cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) cuda_packedtensoraccessor_test.cu cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) cuda_packedtensoraccessor_test.cu cuda_packedtensoraccessor_test.cu cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) tmpxft_000010d8_00000000-7_cuda_packedtensoraccessor_test.cudafe1.cpp [7099/7457] Building CXX object caffe2\CMakeFiles\type_test.dir\__\aten\src\ATen\test\type_test.cpp.obj [7100/7457] Building CUDA object caffe2\CMakeFiles\cuda_optional_test.dir\__\aten\src\ATen\test\cuda_optional_test.cu.obj cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) cuda_optional_test.cu cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) cuda_optional_test.cu cuda_optional_test.cu cl: 命令行 warning D9025 :正在重写“/MT”(用“/MD”) tmpxft_00002b98_00000000-7_cuda_optional_test.cudafe1.cpp [7101/7457] Building CXX object caffe2\CMakeFiles\vec_test_all_types_DEFAULT.dir\__\aten\src\ATen\test\vec_test_all_types.cpp.obj [7102/7457] Building CXX object caffe2\CMakeFiles\vec_test_all_types_AVX2.dir\__\aten\src\ATen\test\vec_test_all_types.cpp.obj E:\PyTorch_Build\pytorch\torch/headeronly/cpu/vec/vec_half.h(16): warning C4556: 内部即时参数“8”的值超出“0 - 7”的范围 E:\PyTorch_Build\pytorch\aten\src\ATen/cpu/vec/vec256/vec256_16bit_float.h(121): warning C4556: 内部即时参数“8”的值超出“0 - 7”的范围 E:\PyTorch_Build\pytorch\aten\src\ATen/cpu/vec/vec256/vec256_16bit_float.h(126): warning C4556: 内部即时参数“8”的值超出“0 - 7”的范围 E:\PyTorch_Build\pytorch\aten\src\ATen/cpu/vec/vec256/vec256_16bit_float.h(128): warning C4556: 内部即时参数“8”的值超出“0 - 7”的范围 [7103/7457] Building CXX object caffe2\CMakeFiles\op_registration_test.dir\__\aten\src\ATen\core\op_registration\op_registration_test.cpp.obj [7104/7457] Building CXX object caffe2\CMakeFiles\vec_test_all_types_AVX512.dir\__\aten\src\ATen\test\vec_test_all_types.cpp.obj ninja: build stopped: subcommand failed. -- Checkout nccl release tag: v2.27.5-1”“错误发生在编译过程的最后一步,且没有留下更详细的错误信息就被 Ninja 工具紧急停止了。 这通常不是代码错误,而是 Ninja 构建工具本身的一个进程管理问题。好消息是,超过95%的编译已经完成,所有困难的部分都成功了。我们现在只需要用一种更稳健的方式完成最后的收尾工作”“我们现在遇到了一个非常具体且经典的Windows C++链接错误:LINK : fatal error LNK1181: 无法打开输入文件“psapi.lib”。 这个错误PyTorch代码、CUDA、或者您的操作完全无关。 它是一个纯粹的Visual Studio环境配置问题。psapi.lib 是Windows系统自带的一个库文件(Process Status API),用于获取进程信息。链接器找不到它,是因为环境变量没有正确指向它所在的目录。 解决方案:修复Visual Studio环境变量 这个问题是因为我们之前激活VS环境的方式,可能没有完全继承所有必要的库路径。我们需要手动将Windows SDK的库路径添加到当前的环境变量中。”
09-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值