如何通过CMake正确链接vcpkg安装的CryptoPP库?
链接错误:
/usr/bin/ld: cannot find -lcryptopp 解决方法 问题场景
在Ubuntu 22服务器上通过vcpkg安装CryptoPP后,执行CMake构建时出现链接错误,但相同代码在本地开发笔记本IDE中可正常运行。
错误原因分析
- 库文件路径错误:手动将
libcryptopp.a复制到/usr/bin/是错误操作——ld默认搜索库的路径为/usr/lib/、/usr/local/lib/等,不会扫描/usr/bin/目录。 - CMake配置冗余:
CMakeLists.txt中多余的add_library(llibcryptopp STATIC IMPORTED)语句(且库名拼写错误)会干扰find_package(cryptopp)的正常工作。 - 头文件路径混乱:手动复制头文件到
/usr/local/include/cryptopp870/属于多余操作,反而会破坏vcpkg自动管理的路径配置。
分步解决方案
1. 清理错误的手动复制文件
先移除之前错误复制的文件,避免路径干扰:
sudo rm /usr/bin/libcryptopp.a sudo rm -rf /usr/local/include/cryptopp870
2. 修正CMakeLists.txt配置
移除冗余的导入库语句,改用vcpkg提供的标准目标链接:
cmake_minimum_required(VERSION 3.22) project(untitled) set(CMAKE_CXX_STANDARD 17) # 让vcpkg自动处理cryptopp的路径和依赖 find_package(cryptopp REQUIRED) add_executable(untitled main.cpp) # 使用vcpkg提供的官方导入目标,自动关联头文件和库路径 target_link_libraries(untitled PRIVATE cryptopp::cryptopp)
3. 修正main.cpp的头文件引用
将手动指定的头文件路径改为vcpkg默认的路径结构:
// 替换原有的cryptopp870路径引用 #include <cryptopp/sha.h> #include <cryptopp/ripemd.h>
4. 重新执行构建命令
确保通过vcpkg的toolchain文件让CMake正确识别库:
rm -rf build mkdir build && cd build cmake -B . -S .. -DCMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake cmake --build .
额外排查步骤
如果仍有问题,可尝试重新安装cryptopp确保包完整性:
sudo vcpkg remove cryptopp sudo vcpkg install cryptopp
内容的提问来源于stack exchange,提问作者Matthew Cornelisse
相关产品推荐
相关产品推荐

