VS2022 C++项目引入GitHub ecdsa_cxx库报错找不到secp256k1.h
ecdsa_cxx库VS2022接入问题解决方案
附属文件作用说明
你提到的几类非源码文件完全不需要全部引入,各自作用如下:
.yml文件:是仓库自动化流水线配置,仅用于原项目的在线构建、自动化测试,本地接入完全不需要.txt文件:大部分是开源协议、开发说明文档,仅根目录的CMakeLists.txt是构建配置文件,如果你不用CMake构建项目可以完全忽略.py文件:是原项目维护用的代码生成、测试辅助脚本,普通业务接入不需要,不用拷贝到项目目录
报错根因
Cannot open include file: 'secp256k1.h': No such file or directory这个错误和依赖是否安装无关,核心是两个配置问题:
- 你把库源码放到
src/ecdsa子目录后,没有把这个目录添加到VS的头文件搜索路径,编译器默认不会遍历子目录找头文件 - 没有配置OpenSSL的头文件、库文件路径,就算解决了secp256k1.h的问题,后续也会报OpenSSL相关的头文件、链接错误
手动接入配置步骤(无CMake)
第一步:整理项目文件
test目录确实只存测试代码,不需要引入。你只需要把原仓库src目录下所有.h、.cpp文件全部拷贝到你项目的src/ecdsa目录即可,其余非源码文件全部不用放。如果拷贝完搜索src/ecdsa目录下没有secp256k1.h,回原仓库src目录搜索对应文件补全就行。
第二步:配置VS项目属性
打开VS2022,右键你的项目选择「属性」,顶部配置栏选「所有配置」,平台选和你安装的OpenSSL匹配的版本(x64/x86不要混),按下面顺序配置:
- 配置头文件搜索路径:找到「C/C++」->「常规」->「附加包含目录」,添加两个路径:
- 项目内的ecdsa源码路径,用VS宏的话一般是
$(ProjectDir)src\ecdsa - 本地OpenSSL安装目录下的include文件夹,比如默认安装路径是
C:\Program Files\OpenSSL\include,以你自己的实际安装路径为准
- 项目内的ecdsa源码路径,用VS宏的话一般是
- 配置C语言标准:找到「C/C」->「语言」->「C++语言标准」,选择
ISO C++11 (/std:c++11)或更高版本 - 配置链接库路径:找到「链接器」->「常规」->「附加库目录」,添加本地OpenSSL安装目录下的lib文件夹
- 配置链接依赖项:找到「链接器」->「输入」->「附加依赖项」,Release配置下添加
libssl.lib、libcrypto.lib;Debug配置下添加libssld.lib、libcryptod.lib
第三步:运行时处理
配置完重新编译即可解决头文件找不到的问题。如果运行时提示缺失OpenSSL相关dll,把OpenSSL安装目录下bin文件夹里对应的libssl-*.dll、libcrypto-*.dll拷贝到你项目exe生成目录即可。
推荐接入方式(减少配置错误)
如果不想手动逐个配置路径,直接用CMake管理项目会省很多事:
- 把ecdsa_cxx的所有必要源码放到你项目的第三方依赖目录,比如
third_party/ecdsa_cxx - 在你自己项目的
CMakeLists.txt里添加如下配置:add_subdirectory(third_party/ecdsa_cxx) target_link_libraries(你的项目目标名 PRIVATE ecdsa_cxx OpenSSL::SSL OpenSSL::Crypto) - 直接用VS2022打开CMake项目根目录,IDE会自动识别配置、处理头文件搜索路径和链接依赖,不需要手动改项目属性,基本不会出现头文件找不到的问题。
内容的提问来源于stack exchange,提问作者Aybak
相关产品推荐
相关产品推荐

