如何在Visual Studio 2019的C++项目中导入liboqs模块?
Visual Studio 2019 下liboqs安装配置落地步骤
适用环境:VS2019、C++17标准、64位Windows系统
前置准备
先确认本地已经安装以下组件:
- Visual Studio 2019,安装时勾选「使用C++的桌面开发」工作负载
- CMake(版本≥3.16,安装时勾选「Add CMake to the system PATH」选项)
- Git for Windows
步骤1:拉取完整源码
在你打算存放liboqs源码的目录下打开Git Bash,执行以下命令拉取代码:
git clone --recursive https://github.com/open-quantum-safe/liboqs.git cd liboqs
必须加--recursive参数拉取嵌套子模块,漏了这步后续100%编译失败。如果已经拉过代码没加参数,就在源码根目录执行git submodule update --init --recursive补全子模块
步骤2:CMake配置生成VS工程
- 在liboqs源码根目录新建名为
build的空文件夹 - 从Windows开始菜单找到并打开x64 Native Tools Command Prompt for VS 2019(不要用普通CMD/PowerShell,否则会找不到VS编译环境)
- 在打开的命令行中cd到刚才新建的build目录,执行配置命令:
cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX=./install -DOQS_BUILD_ONLY_LIB=ON
命令参数说明:
-G "Visual Studio 16 2019":指定生成VS2019兼容的解决方案文件-A x64:指定编译64位版本(liboqs不保证32位环境兼容性,不要选x86)-DCMAKE_CXX_STANDARD=17:强制启用C++17标准,匹配你的开发环境-DCMAKE_INSTALL_PREFIX=./install:指定最终编译产物的输出路径为build目录下的install文件夹,后续引用直接找这个路径就行-DOQS_BUILD_ONLY_LIB=ON:跳过测试用例、示例程序编译,大幅缩短编译时间
步骤3:编译安装库文件
配置完成后,还是在刚才的x64原生命令行窗口执行编译命令:
# 编译Release版本 cmake --build . --config Release --target INSTALL # 日常调试建议额外编译Debug版本 cmake --build . --config Debug --target INSTALL
等命令执行完成,打开build/install目录就能看到整理好的开发文件:
include目录:liboqs所有头文件lib目录:编译生成的oqs.lib等库文件bin目录:动态库版本对应的oqs.dll文件
步骤4:VS2019项目中引用配置
打开你自己的C++项目,右键项目选择「属性」,顶部平台选x64,按以下配置:
- 「C/C++ → 常规 → 附加包含目录」:添加
build/install/include的完整本地路径 - 「链接器 → 常规 → 附加库目录」:根据当前编译配置(Release/Debug),添加对应版本的
build/install/lib路径 - 「链接器 → 输入 → 附加依赖项」:添加
oqs.lib - 如果使用动态库编译版本,把
build/bin目录下对应版本的oqs.dll复制到你项目的exe输出目录即可
配置有效性验证
写个最小测试代码验证配置是否正常:
#include <iostream> #include <oqs/oqs.h> int main() { std::cout << "liboqs 版本:" << OQS_VERSION_TEXT << std::endl; std::cout << "支持的KEM算法数量:" << OQS_KEM_alg_count() << std::endl; return 0; }
代码能正常编译运行,输出版本号和算法数量就说明配置成功。
常见问题
- 编译时报找不到编译器/编译选项错误:检查是不是没开VS2019对应的x64原生工具命令行,普通CMD/PowerShell默认没有加载VS编译环境变量
- 编译时报头文件缺失:90%是拉代码时没加
--recursive参数,按步骤1里的命令补全子模块后重新配置即可 - 链接时报符号找不到:检查是不是平台选了x86,或者Debug/Release版本的库和当前项目编译配置不匹配
内容的提问来源于stack exchange,提问作者user19316228
相关产品推荐
相关产品推荐

