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
相关推荐
_Narcissus_2 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
法哥20123 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
_Narcissus_4 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
冻柠檬飞冰走茶4 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx4 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
小鱼仙官5 小时前
Ubuntu C++ NTP校时程序
linux·c++·ubuntu
冻柠檬飞冰走茶5 小时前
《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值
开发语言·数据结构·c++·算法·list
老当益壮梁奶奶5 小时前
Linux软件编程学习笔记(二)Linux文件IO编程入门:从fopen到fgetc
linux·c语言·c++·笔记·学习
雪的季节5 小时前
C++ 高级(泛型编程与模板)(有空再研究吧)
c++
三十岁老牛再出发6 小时前
8月21日总结
c++·python