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

CMake构建依赖Tink与AWS C++ SDK的库时遇AWS::Crypto未找到错误

解决依赖Google Tink与AWS C++ SDK时的CMake链接错误

问题详情

构建依赖Google Tink库和AWS C++ SDK的库时,触发如下CMake错误:

Target "tcc-tink" links to target "AWS::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing

尝试过的操作均无效:

  • 发现AWS自带的CMake文件支持crypto和AWS::crypto目标,但该文件仅用于AWS内部构建
  • 复制该文件并重命名为FindAWScrypto.cmake放到AWS C++ SDK源码目录,无效果
  • 在自身CMakeLists.txt和上述crypto文件中尝试组合使用find_target()和add_library(),未解决问题
  • 尝试将AWS::Crypto映射到crypto,但失败,且不清楚该引用的来源

解决方案

1. 手动创建AWS::Crypto别名映射

AWS::Crypto是AWS SDK内部对系统加密库(通常是OpenSSL)的封装别名。如果SDK配置未正确导入该目标,可以手动将其映射到系统已有的加密库目标。在find_package(AWSSDK)之后添加以下代码:

find_package(OpenSSL REQUIRED)
# 若OpenSSL::Crypto存在但AWS::Crypto不存在,创建别名
if(TARGET OpenSSL::Crypto AND NOT TARGET AWS::Crypto)
    add_library(AWS::Crypto ALIAS OpenSSL::Crypto)
endif()

2. 修复tink-kms的依赖链接

tink-kms的源文件(如aws_crypto.cc)可能间接依赖加密库,需要确保它正确链接相关依赖:

target_link_libraries(tink-kms PRIVATE tink::static ${AWSSDK_LINK_LIBRARIES} OpenSSL::Crypto)

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(tcc-tink CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

add_subdirectory(tink)

find_package(AWSSDK REQUIRED COMPONENTS kms)
find_package(OpenSSL REQUIRED)

# 映射AWS::Crypto到OpenSSL::Crypto
if(TARGET OpenSSL::Crypto AND NOT TARGET AWS::Crypto)
    add_library(AWS::Crypto ALIAS OpenSSL::Crypto)
endif()

add_library(tink-kms STATIC tink/cc/integration/awskms/aws_crypto.cc tink/cc/integration/awskms/aws_kms_aead.cc)
target_include_directories(tink-kms PRIVATE 
    "${CMAKE_CURRENT_BINARY_DIR}/tink/__include_alias"
    "${CMAKE_CURRENT_BINARY_DIR}/tink/__third_party/com_google_absl/src"
    "${CMAKE_CURRENT_BINARY_DIR}/tink/__third_party/boringssl/src/src/include"
)
target_link_libraries(tink-kms PRIVATE tink::static ${AWSSDK_LINK_LIBRARIES} OpenSSL::Crypto)

add_library(tcc-tink SHARED tcc_tink.cpp aws_kms_client.cpp dummy_kms_client.cpp)
target_link_libraries(tcc-tink PUBLIC tink::static aws-cpp-sdk-kms tink-kms)

原理说明

  • AWS SDK内部用AWS::Crypto统一指代系统加密库,当SDK的CMake配置未被正确加载时,这个目标会缺失
  • 通过手动创建别名,将AWS::Crypto映射到系统已有的OpenSSL::Crypto目标,就能解决链接时的目标未找到问题
  • 同时确保tink-kms链接加密库,避免间接依赖导致的问题

内容的提问来源于stack exchange,提问作者John R Ramsden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:45:18