与 AWS 开发工具包的链接问题

Linking issues with AWS SDK

本文关键字:链接 问题 工具包 开发工具 AWS 开发      更新时间:2023-10-16

我对 AWS 开发工具包和 Linux 的了解有限,但我一直在阅读 GCC 和 CMake 语法,并试图让自己在 AWS https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cplusplus.html#sample-cplusplus-sdk 上编译和运行示例。这是我第二次尝试解决这个问题。

这是我正在运行的环境:

  • AWS Linux Cloud 9
  • GCC (GCC( 7.2.1
  • 20170915 (Red Hat 7.2.1-2(
  • GNU make 3.82
  • cmake3 版本 3.6.1

我使用了以下命令:

- sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3
- git clone https://github.com/aws/aws-sdk-cpp.git
- mkdir sdk_build
- cd sdk_build
- cmake3 ../aws-sdk-cpp -DBUILD_ONLY="s3"
- sudo make
- sudo make install

构建和运行 AWS 开发工具包代码:

https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cplusplus.html#sample-cplusplus-sdk-code

我的CMakeLists.txt我使用:

cmake_minimum_required(VERSION 2.8)
project(s3-demo)
find_package(aws-sdk-cpp)
add_definitions(-DUSE_IMPORT_EXPORT)
add_executable(s3-demo s3-demo.cpp)
target_link_libraries(s3-demo aws-cpp-sdk-s3)

我的模块/目录:

environment
- .c9
- aws-sdk-cpp #This is the git source DIR
- sdk_build #This is the build DIR
- CMakeLists.txt (see above)
- hello.cpp
- hello.cpp.o  

问题:

许多未定义的引用,这里有一个片段:

aws::Client::
  • ClientConfiguration::ClientConfiguration((
  • Aws::
  • InitAPI(Aws::SDKOptions const&(
  • Aws::S3::S3Client::S3Client(Aws::Client::ClientConfiguration const&, Aws::Client::
  • AWSAuthV4Signer::P ayloadSigningPolicy, bool, Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION(
  • 对 'Aws::S3::S3Client::~S3Client(( 的未定义引用
  • 与 Aws::Client::
  • AWSClient::AWSClient(Aws::Client::AWSClient const&( 的一些链接问题

我想知道的:

我知道 -L 有助于识别我要使用的共享
  1. 库文件夹,而 -l 有助于识别我要使用的共享文件。但是,我已经读到,在按照网站上的说明构建上述 AWS 项目时,目标和标志应该自动填充,我不需要做任何特殊链接来让这个项目工作。

  2. 看起来 aws-cpp-sdk-core 和 aws-cpp-sdk-s3 在我的源文件夹 aws-sdk-cpp 中。这应该在我的构建文件夹中sdk_build吗?我是否正确编译了我的项目?

  3. 如何构建成功的非源文件夹 aws-sdk-cpp,我是否应该在 aws-sdk-cpp 中构建源内文件夹?

对我的问题的任何帮助不胜感激。

我在构建过程中发现的问题和相应的解决方案:

1. 未定义的链接器问题,无法从sdk_build中找到依赖项。

解决方案:在 CMakeList find_package中使用 AWSSDK .txt为我们提供指导

find_package(AWSSDK REQUIRED COMPONENTS s3)
2. Cmake

构建错误,指出 Cmake 找不到 aws-sdk-cpp 文件,例如 aws-sdk-cpp-config.cmake、aws-c-event-stream-config.cmake。

解决方案:AWS 开发工具包根据 AWSSDKConfig.cmake 查找二进制文件,并包含 sdk_build 安装路径中的文件夹。我们将在 ~/environment/CMakeList 中添加以下内容.txt以下内容

set(AWSSDK_ROOT_DIR, "/usr/local/")

3. Cmake 构建声明,当在安装sdk_build期间构建共享库时,它正在寻找静态库。

解决方案:来自 aws-sdk-cpp 的 CMakeLists.txt 作为共享库构建到 sdk_build 中,看起来共享库标志在链接期间尚未打开,因此它会查找静态库,我们需要打开它

set(BUILD_SHARED_LIBS ON)

环境

AWS Linux Cloud 9
gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
GNU Make 3.82
cmake3 version 3.6.1

我用来构建C++示例的命令:

安装所需的工具

sudo yum -y install gcc72 gcc72-c++
sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3

在家庭/EC2-用户/环境/

git clone https://github.com/aws/aws-sdk-cpp.git
cd aws-sdk-cpp
mkdir sdk_build
cd sdk_build
cmake3 .. -DBUILD_ONLY=s3
sudo make install
cd ..
create CMakeLists.txt and s3-demo.cpp here (see below)
cmake3 . 
make

终端中测试了可执行 s3 演示的输出

./s3-demo my-test-bucket us-west-2
/

home/ec2-user/environment/中需要的文件

S3演示.cpp在此链接中获取您的代码

CMakeList.txt

cmake_minimum_required(VERSION 3.5)
project(s3-demo)
set(AWSSDK_ROOT_DIR, "/usr/local/")
set(BUILD_SHARED_LIBS ON)
find_package(AWSSDK REQUIRED COMPONENTS s3)
add_executable(s3-demo s3-demo.cpp)
target_link_libraries(s3-demo ${AWSSDK_LINK_LIBRARIES})