本指南详细说明如何在 CLion 中配置编译和调试 Botan 示例程序。
按照你的截图,在 "运行/调试配置" 中填写:
名称(N): aes_example
工具链: 使用默认值 Default
源文件: open_source/botan/src/examples/aes.cpp
在 编译器选项 字段中输入:
-std=c++20 -g -O0 -DDEBUG -I./build/include/public -L. -lbotan-3 -Wl,-rpath,.详细说明:
-std=c++20- 使用 C++20 标准-g- 包含调试信息-O0- 关闭优化(方便调试)-DDEBUG- 定义 DEBUG 宏-I./build/include/public- 包含 Botan 头文件路径-L.- 链接库搜索路径(当前目录)-lbotan-3- 链接 Botan 库-Wl,-rpath,.- 设置运行时库路径
工作目录(W): /Users/kyler/Documents/code/geekrun/learnc/open_source/botan
或者使用相对路径:$PROJECT_DIR$/open_source/botan
点击 环境变量 按钮,添加:
名称: DYLD_LIBRARY_PATH
值: /Users/kyler/Documents/code/geekrun/learnc/open_source/botan
或者简化版:
名称: DYLD_LIBRARY_PATH
值: .
在 botan 目录下创建:
cmake_minimum_required(VERSION 3.20)
project(BotanExamples)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置 Botan 库路径
set(BOTAN_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set(BOTAN_INCLUDE_DIR ${BOTAN_ROOT}/build/include/public)
set(BOTAN_LIBRARY_DIR ${BOTAN_ROOT})
# 查找 Botan 库
find_library(BOTAN_LIBRARY
NAMES botan-3
PATHS ${BOTAN_LIBRARY_DIR}
NO_DEFAULT_PATH
)
if(NOT BOTAN_LIBRARY)
message(FATAL_ERROR "Botan library not found in ${BOTAN_LIBRARY_DIR}")
endif()
# 包含目录
include_directories(${BOTAN_INCLUDE_DIR})
# 链接目录
link_directories(${BOTAN_LIBRARY_DIR})
# 编译选项
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
# 示例程序列表
set(EXAMPLES
aes
aes_cbc
hash
hmac
rsa_encrypt
ecdsa
)
# 为每个示例创建可执行文件
foreach(EXAMPLE ${EXAMPLES})
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/examples/${EXAMPLE}.cpp)
add_executable(${EXAMPLE}_example src/examples/${EXAMPLE}.cpp)
target_link_libraries(${EXAMPLE}_example ${BOTAN_LIBRARY})
# 设置运行时库路径
set_target_properties(${EXAMPLE}_example PROPERTIES
INSTALL_RPATH ${BOTAN_LIBRARY_DIR}
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
endforeach()
# 自定义目标:运行 AES 示例
add_custom_target(run_aes
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/aes_example
DEPENDS aes_example
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)- File → Open → 选择包含 CMakeLists.txt 的目录
- CLion 会自动识别 CMake 项目
- 在右上角选择要运行的目标(如
aes_example) - 点击绿色运行按钮
- Run → Edit Configurations...
- 点击 + → C/C++ Single File
基本信息:
- 名称:
aes_example - 源文件:选择
src/examples/aes.cpp
编译设置:
编译器选项: -std=c++20 -g -O0 -I./build/include/public -L. -lbotan-3 -Wl,-rpath,.
工作目录: /Users/kyler/Documents/code/geekrun/learnc/open_source/botan环境变量:
DYLD_LIBRARY_PATH = .
展开 其他选项,确保:
- ☑️ 激活工具窗口
- ☐ 使工具窗口获得焦点(可选)
名称: aes_example
源文件: open_source/botan/src/examples/aes.cpp
编译器选项: -std=c++20 -g -I./build/include/public -L. -lbotan-3 -Wl,-rpath,.
工作目录: /Users/kyler/Documents/code/geekrun/learnc/open_source/botan
环境变量: DYLD_LIBRARY_PATH=.
名称: hash_example
源文件: open_source/botan/src/examples/hash.cpp
编译器选项: -std=c++20 -g -I./build/include/public -L. -lbotan-3 -Wl,-rpath,.
工作目录: /Users/kyler/Documents/code/geekrun/learnc/open_source/botan
环境变量: DYLD_LIBRARY_PATH=.
- 确保编译器选项包含
-g -O0 - 在代码中设置断点
- 点击 Debug 按钮(绿色虫子图标)
- F8: 单步跳过
- F7: 单步进入
- F9: 继续执行
- Shift+F8: 单步跳出
错误信息: ld: library not found for -lbotan-3
解决方案:
- 确保 Botan 已正确编译
- 检查工作目录是否正确
- 验证库文件存在:
ls -la /Users/kyler/Documents/code/geekrun/learnc/open_source/botan/libbotan-3.dylib
错误信息: dyld: Library not loaded: libbotan-3.dylib
解决方案:
- 添加环境变量
DYLD_LIBRARY_PATH=. - 或在编译选项中添加
-Wl,-rpath,.
错误信息: fatal error: 'botan/block_cipher.h' file not found
解决方案:
- 检查包含路径:
-I./build/include/public - 确保 Botan 已配置和构建:
python3 configure.py && make
- Botan 库已编译完成
- 源文件路径正确
- 编译器选项包含所有必要参数
- 工作目录设置为 Botan 根目录
- 环境变量 DYLD_LIBRARY_PATH 已设置
- 可以成功编译
- 可以成功运行
- 调试断点正常工作
配置完成后,尝试:
- 编译:点击锤子图标
- 运行:点击绿色播放按钮
- 调试:设置断点后点击绿色虫子图标
成功的话应该看到类似输出:
AES-256 single block encrypt: 8EA2B7CA516745BFEAFC49904B496089
AES-256 single block encrypt: 6BD443EC423D5CD317672847EEB62E81
祝你在 CLion 中调试 Botan 愉快!🚀