首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AWS SDK链接问题

用AWS SDK链接问题
EN

Stack Overflow用户
提问于 2019-12-17 03:44:15
回答 1查看 2.2K关注 0票数 5

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

这就是我正在运行的环境:

  • AWS 9
  • gcc (GCC) 7.2.1 20170915 (红帽7.2.1-2)
  • 3.82
  • cmake3版本3.6.1

我使用了以下命令:

代码语言:javascript
复制
- 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 SDK代码:

代码语言:javascript
复制
https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cplusplus.html#sample-cplusplus-sdk-code

我使用的CMakeLists.txt:

代码语言:javascript
复制
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)

我的模块/目录:

代码语言:javascript
复制
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::PayloadSigningPolicy,bool,Aws::S3::US_EAST_1_REGIONAL_ENDPOINT_OPTION)
  • 对` `Aws::S3::S3Client::~S3Client()的未定义引用
  • 与Aws::Client::AWSClient::AWSClient(Aws::Client::AWSClient const&)的一些链接问题

我想知道的是:

  1. 我知道-L有助于识别我想要使用的共享库文件夹,并且-l是我想要使用的共享文件。然而,我已经读到,当构建以上的AWS项目在网站上的指示,目标和标志应该自动填充,我不需要做任何特殊的链接,以使这个项目的工作。
  2. 看起来和aws-cpp-sdk-s3就在我的源文件夹中。这应该在我的构建文件夹sdk_build中吗?我的项目编译正确吗?
  3. 如何构建一个成功的源文件夹aws,是否应该在aws中构建源代码中的文件夹?

任何对我的问题的帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-14 06:26:29

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

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

解决方案:在CMakeLists.txt的find_package中使用AWSSDK来指导我们

代码语言:javascript
复制
find_package(AWSSDK REQUIRED COMPONENTS s3)

2. Cmake构建错误,说明Cmake无法找到aws文件,例如aws-sdk-cpp-config.cmake、aws事件流-config.cmake。

解决方案:AWS查找二进制文件,并包括sdk_build安装路径中的文件夹。我们将在~/environment/CMakeLists.txt中添加以下内容

代码语言:javascript
复制
set(AWSSDK_ROOT_DIR, "/usr/local/")

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

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

代码语言:javascript
复制
set(BUILD_SHARED_LIBS ON)

环境

代码语言:javascript
复制
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++样品的命令

安装所需的工具

代码语言:javascript
复制
sudo yum -y install gcc72 gcc72-c++
sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3

家庭/EC2建筑项目-用户/环境/

代码语言:javascript
复制
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-演示在终端上的测试输出

代码语言:javascript
复制
./s3-demo my-test-bucket us-west-2

/home/ec2所需的文件-用户/环境/

s3-demo.cpp 在此链接中获取代码

CMakeLists.txt

代码语言:javascript
复制
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})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59367331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档