【问题标题】:AWS SDK C++ install using cmake on Ubuntu, problem with installing third-party libraries在 Ubuntu 上使用 cmake 安装 AWS SDK C++,安装第三方库时出现问题
【发布时间】:2021-01-21 14:15:11
【问题描述】:

我正在 Ubuntu 20.04 中安装 aws-cpp-sdk,遵循以下安装说明:https://github.com/aws/aws-sdk-cpp

我按照有效的说明从源代码构建/安装了 SDK。安装地点:

  • /usr/local/lib
  • /usr/local/include/aws

我按照说明构建/安装了aws-c-common(尽管我没有使用DCMAKE_INSTALL_PREFIX)。

我尝试构建aws-checksums,但无法通过 cmake。当我在代码目录中的构建目录中运行cmake .. 时,我得到:

-- The C compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
/usr/local/lib/cmake/lib/cmake
CMake Error at CMakeLists.txt:32 (include):
  include could not find load file:

    AwsCFlags

CMake Error at CMakeLists.txt:33 (include):
  include could not find load file:

    AwsCheckHeaders

CMake Error at CMakeLists.txt:34 (include):
  include could not find load file:

    AwsSharedLibSetup

CMake Error at CMakeLists.txt:35 (include):
  include could not find load file:

    AwsSanitizers

CMake Error at CMakeLists.txt:37 (include):
  include could not find load file:

    AwsFindPackage

CMake Error at CMakeLists.txt:38 (include):
  include could not find load file:

    AwsFeatureTests

CMake Error at CMakeLists.txt:116 (aws_set_common_properties):
  Unknown CMake command "aws_set_common_properties".

-- Configuring incomplete, errors occurred!
See also ...

我尝试将前缀指向 sdk 安装文件夹,但这并没有解决我的问题。那就是我卡住的地方。任何输入表示赞赏。谢谢。

【问题讨论】:

  • 您似乎已经向CMakeLists.txt 添加了一些message() 调用,并且此调用打印了/usr/local/lib/cmake/lib/cmake 行。这是AWS_MODULE_PATH 变量的值,不是吗?他们对变量的计算很奇怪。看起来变量的值应该是/usr/local/lib/cmake。尝试将CMakeLists.txt中的变量直接设置为该值(并检查该目录是否包含AwsCFlags.cmake和其他.cmake脚本)。
  • @Tsyvarev 感谢您的提示。你是对的,我不得不改变前缀。 cmake .. -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ 虽然有些测试确实失败了。我想写一个答案去吧,否则我应该删除这个帖子吗?
  • 我不想回答。我只能看到他们的CMakeLists.txt,并且据我了解AWS_MODULE_PATH 的计算是一个问题。但我不知道正确的方式。您可以回答您的问题并描述工作方式。 (虽然我们更喜欢“工作”与“正确”相同,但在现实生活中它们有时可能会有所不同:))

标签: c++ amazon-web-services amazon-s3 cmake aws-sdk


【解决方案1】:

如果您是从源代码构建,请确保使用此命令

git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

我在构建时遇到了类似的问题,因为我缺少 --recurse-submodules 标记。我在一个运行 Ubuntu 的 docker 容器中构建。我的解决方案适用于 AWS cpp sdk,但它也可能适用于您的情况。

【讨论】:

  • 谢谢,这真的很有帮助。结果他们已经开始使用介于 1.7.x 和 1.9.x 之间的子模块,因此我们的脚本被破坏了。
【解决方案2】:

我创建了一个演示应用程序s3-demo,它获取特定区域中的存储桶列表。该项目可在github.com/unfor19/docker-aws-sdk-cpp获得

我也遇到了与您相同的问题(以及更多问题),但我终于能够编写一个构建 aws-sdk-cpp 和演示应用程序的 Dockerfile。

这是我的Dockerfile

ARG AWS_SDK_CPP_VERSION="1.8.160"
ARG AWS_SDK_CPP_BUILD_TYPE="Release"
ARG APP_BUILD_TYPE="Release"

### -----------------------------------------------------
### Base image
### -----------------------------------------------------
FROM ubuntu:20.04 as base

# Fix tzdata hang
ENV TZ=Etc/UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN \
    apt-get update && \
    apt-get install -y \
    curl wget git zip unzip \
    cmake g++ gcc \
    libcurl4-openssl-dev libssl-dev libpulse-dev \
    uuid-dev zlib1g-dev

RUN apt-get update && \
    apt-get install -y \
    make golang-1.13

ENV PATH="$PATH:/usr/lib/go-1.13/bin"
COPY scripts/ /usr/local/bin/
WORKDIR /code/


### -----------------------------------------------------
### Build aws-sdk-cpp
### -----------------------------------------------------
FROM base as build-aws-sdk-cpp
ARG AWS_SDK_CPP_VERSION
ARG AWS_SDK_CPP_BUILD_TYPE
ENV AWS_SDK_CPP_VERSION="${AWS_SDK_CPP_VERSION}" \
    AWS_SDK_CPP_BUILD_TYPE="${AWS_SDK_CPP_BUILD_TYPE}"
WORKDIR /code/
RUN download.sh "https://github.com/aws/aws-sdk-cpp/archive/${AWS_SDK_CPP_VERSION}.zip"
WORKDIR /sdk_build/
RUN cmake /code/aws-sdk-cpp-${AWS_SDK_CPP_VERSION} -DBUILD_ONLY="s3" -DCMAKE_BUILD_TYPE="${AWS_SDK_CPP_BUILD_TYPE}"
RUN make && \
    make install && \
    rm -rf /code/


### -----------------------------------------------------
### Build the application
### -----------------------------------------------------
FROM build-aws-sdk-cpp as build-app
WORKDIR /code/
COPY . .
ARG APP_BUILD_TYPE
ENV APP_BUILD_TYPE="${APP_BUILD_TYPE}"
RUN rm -rf build && cmake -S . -B build -DCMAKE_BUILD_TYPE="${APP_BUILD_TYPE}"
WORKDIR /code/build/
RUN make
# Default region N.Virginia

【讨论】:

    【解决方案3】:

    我在 Dockerfile 中执行此操作,它运行正常:

    RUN cd /tmp \
      && git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp.git \
      && cd aws-sdk-cpp \
      && mkdir build \
      && cd build \
      && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_ONLY="ecr" \
      && make \
      && make install
    

    它也可以在没有 -DBUILD_ONLY 选项的情况下构建。但是,这是在 Ubuntu 18.04 LTS 上,而不是 20.04。不过,我不认为有什么不同。

    你还没有说你给 cmake 提供了什么选项。

    【讨论】:

    • 您好约瑟夫,感谢您的评论。我同意这是建立你的方式但不完全。正如我所提到的,我根据自述文件进行了基本设置,这意味着我在安装 sdk 期间没有设置任何内容。为了让我运行基本的 s3-sample,我需要安装 sdk 自述文件中列出的第三方依赖项。他们似乎没有完全安装 aws-sdk-cpp Cmakelist is.txt 默认情况下指示选项 BUILD_DEPS ON 。也许我错过了一个设置。我愿意接受建议。
    • 克隆时你需要 --recurse-submodules 否则 cmake 配置将不起作用(并因此构建)。
    • @tothphu 我不认为这最初是必要的,但现在是。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2021-01-14
    • 1970-01-01
    • 2021-04-07
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多