You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake无法通过find_package找到已安装的Crypto++库求助

解决CMake找不到通过apt安装的Crypto++库的问题

通过sudo apt install libcrypto++-dev安装的Crypto++开发包,并没有提供CMake官方认可的配置文件(CryptoPPConfig.cmake或cryptopp-config.cmake),所以默认的find_package(CryptoPP REQUIRED)会报错。以下是几种可行的解决方法:

方法一:手动查找库和头文件(推荐)

直接用find_library和find_path定位库文件与头文件,无需依赖CMake配置文件:

# 查找Crypto++库
find_library(CRYPTOPP_LIBRARY NAMES cryptopp)
# 查找Crypto++头文件目录(头文件都在cryptopp子目录下)
find_path(CRYPTOPP_INCLUDE_DIR NAMES cryptopp/cryptlib.h)

# 检查是否找到,没找到就终止构建
if(NOT CRYPTOPP_LIBRARY)
    message(FATAL_ERROR "未找到Crypto++库文件")
endif()
if(NOT CRYPTOPP_INCLUDE_DIR)
    message(FATAL_ERROR "未找到Crypto++头文件目录")
endif()

# 将库和头文件关联到你的目标
add_executable(你的可执行文件名 你的源码文件.cpp)
target_include_directories(你的可执行文件名 PRIVATE ${CRYPTOPP_INCLUDE_DIR})
target_link_libraries(你的可执行文件名 PRIVATE ${CRYPTOPP_LIBRARY})

方法二:自定义FindCryptoPP.cmake模块

如果坚持要用find_package命令,可以自己编写CMake模块文件:

  1. 在项目根目录创建cmake/modules文件夹,新建FindCryptoPP.cmake文件,内容如下:
find_path(CRYPTOPP_INCLUDE_DIR NAMES cryptopp/cryptlib.h)
find_library(CRYPTOPP_LIBRARY NAMES cryptopp)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CryptoPP DEFAULT_MSG CRYPTOPP_LIBRARY CRYPTOPP_INCLUDE_DIR)

if(CRYPTOPP_FOUND)
    set(CryptoPP_INCLUDE_DIRS ${CRYPTOPP_INCLUDE_DIR})
    set(CryptoPP_LIBRARIES ${CRYPTOPP_LIBRARY})
endif()

mark_as_advanced(CRYPTOPP_INCLUDE_DIR CRYPTOPP_LIBRARY)
  1. 在项目的CMakeLists.txt开头添加模块路径,然后调用find_package:
# 添加自定义模块路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
# 现在可以正常调用find_package了
find_package(CryptoPP REQUIRED)

add_executable(你的可执行文件名 你的源码文件.cpp)
target_link_libraries(你的可执行文件名 PRIVATE ${CryptoPP_LIBRARIES})
target_include_directories(你的可执行文件名 PRIVATE ${CryptoPP_INCLUDE_DIRS})

方法三:直接指定系统安装路径(临时测试用)

由于apt默认将Crypto++的头文件安装在/usr/include/cryptopp,库文件在/usr/lib,可以直接硬编码路径快速测试:

add_executable(你的可执行文件名 你的源码文件.cpp)
# 头文件目录指定为/usr/include,因为源码里是#include <cryptopp/xxx.h>
target_include_directories(你的可执行文件名 PRIVATE /usr/include)
# 直接链接cryptopp库
target_link_libraries(你的可执行文件名 PRIVATE cryptopp)

内容的提问来源于stack exchange,提问作者user13134124

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:35:31