法一
1.visual studio 中导入 benchmark.lib
Shlwapi.lib
这两个库
2.预处理宏 BENCHMARK_STATIC_DEFINE
错误提示
- 没有加入
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所在目录,执行文件,就可以看到结果如下
心得
检查库 和 当前项目的编译工具链
- release 还是 debug
- x86 还是 x64
- cl 编译器
- link 连接器
库
- Windows静态库:lib
- Windows动态库:lib、dll
- 库之间的依赖关系
宏
- 预处理宏
BENCHMARK_STATIC_DEFINE