visual studio 中导入 benchmark

法一

1.visual studio 中导入 benchmark.lib Shlwapi.lib这两个库

2.预处理宏 BENCHMARK_STATIC_DEFINE

vs导入参考

错误提示

  1. 没有加入 BENCHMARK STATIC_DEFINE
    error LNK2001: 无法解析的外部符号 "__declspec(dllimport) int __cdecl benchmark::internal::InitializeStreams(void)" (imp ?InitializeStreams@internal@benchmark@@YAHXZ)
    1>test.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual void __thiscall benchmark::internal::FunctionBenchmark::Run(class benchmark::State &)" (
    imp ?Run@FunctionBenchmark@internal@benchmark@@UAEXAAVState@3@@Z)
    1>test.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) class benchmark::internal::Benchmark * __cdecl benchmark::internal::RegisterBenchmarkInternal(class benchmark::internal::Benchmark *)" (_imp?RegisterBenchmarkInternal@internal@benchmark@@YAPAVBenchmark@12@PAV312@@Z)

2.没有加入Shlwapi.lib

benchmark.lib(sysinfo.obj) : error LNK2001: 无法解析的外部符号 __imp_SHGetValueA


上面的这些脏活可以让 cmake 干(find_package(benchmark REQUIRED) 他会执行benchmarkTargets.cmake,也就是法二这么干的)。

cmake 隐藏了很多细节

法二

CMake 复制代码
cmake_minimum_required(VERSION 3.10)  
  
project(benchmark_array)  
  
set(CMAKE_CXX_STANDARD 17)  
set(CMAKE_CXX_STANDARD_REQUIRED ON)  
#这里的路径要填你本地编译出来的路径
set(BENCHMARK_INSTALL_DIR "C:/Users/Ori/Desktop/codeTool/benchmark-main/build")  
  
find_package(benchmark REQUIRED PATHS ${BENCHMARK_INSTALL_DIR})  
#这里要填工程和所要测试的文件名
add_executable(benchmark_array cppThread.cpp)  
  
target_link_libraries(benchmark_array benchmark::benchmark)  

在cmakelists文件同级目录新建一个build目录用于编译测试工程,开vs控制台进入build目录下,依次执行命令

cmake ... -G "Visual Studio 16 2019" -A x64

msbuild [project name].sln /property:Configuration=Release /property:Platform=x64

编译成功后控制台进入Release目录或者说是编译产物benchmark_array.exe所在目录,执行文件,就可以看到结果如下

cmake导入参考

心得

检查库 和 当前项目的编译工具链

  1. release 还是 debug
  2. x86 还是 x64
  3. cl 编译器
  4. link 连接器

  1. Windows静态库:lib
  2. Windows动态库:lib、dll
  3. 库之间的依赖关系

  1. 预处理宏 BENCHMARK_STATIC_DEFINE
相关推荐
半桔2 分钟前
【烧脑算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题
数据结构·c++·算法·leetcode·面试·职场和发展·排序算法
大白同学42134 分钟前
【C++】多态
开发语言·c++
南玖yy35 分钟前
C++ 类模板三参数深度解析:从链表迭代器看类型推导与实例化(为什么迭代器类模版使用三参数?实例化又会是怎样?)
开发语言·数据结构·c++·人工智能·windows·科技·链表
二猛子1 小时前
排序算法-归并排序与快速排序
数据结构·c++·算法·排序算法
无名之逆2 小时前
[特殊字符]Build High-Performance Web Services with Hyperlane
java·前端·java-ee·eclipse·tomcat·maven·visual studio
yxc_inspire2 小时前
基于Qt的app开发的过渡期
c++·qt·tcp
瓦特what?2 小时前
C++中实现随机数(超详细!)
开发语言·c++·windows·算法
梁下轻语的秋缘2 小时前
每日c/c++题 备战蓝桥杯(洛谷P1481 魔族密码 题解)
c语言·c++·蓝桥杯
愚润求学2 小时前
【Linux】线程控制
linux·运维·开发语言·c++·笔记
泽02022 小时前
C++之动态数组vector
java·开发语言·c++