Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将问题链接到AWS SDK_C++_Amazon Web Services_Linker Errors - Fatal编程技术网

C++ 将问题链接到AWS SDK

C++ 将问题链接到AWS SDK,c++,amazon-web-services,linker-errors,C++,Amazon Web Services,Linker Errors,我对AWS SDK和Linux的知识有限,但我一直在阅读GCC和CMake语法,并试图让自己在AWS上编译和运行该示例。这是我第二次尝试解决这个问题 这是我正在运行的环境: AWS Linux云9 gcc(gcc)7.2.1 20170915(红帽7.2.1-2) GNU Make 3.82 cmake3版本3.6.1 我使用了以下命令: - sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3 - git

我对AWS SDK和Linux的知识有限,但我一直在阅读GCC和CMake语法,并试图让自己在AWS上编译和运行该示例。这是我第二次尝试解决这个问题

这是我正在运行的环境:

  • AWS Linux云9
  • gcc(gcc)7.2.1 20170915(红帽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 SDK代码的构建和运行:

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常量&)
  • Aws::S3::S3Client::S3Client(Aws::Client::ClientConfiguration const&,Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy,bool,Aws::S3::美国东部地区端点选项)
  • 对“Aws::S3::S3Client::~S3Client()的未定义引用
  • Aws::Client::AWSClient::AWSClient(Aws::Client::AWSClient const&)的一些链接问题
我想知道的是:

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

  • 看起来aws cpp sdk核心和aws-cpp-sdk-s3都在我的源文件夹aws sdk cpp中。这应该在我的生成文件夹sdk\U build中吗?我是否正确编译了我的项目

  • 如何成功构建源代码外文件夹aws sdk cpp,以及应如何在aws sdk cpp内构建源代码内文件夹


  • 非常感谢您对我的问题提供的任何帮助。

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

    1.未定义的链接器问题,无法从sdk_build中找到依赖项。 解决方案:使用CMakeLists.txt的find_包中的AWSSDK来指导我们

    find_package(AWSSDK REQUIRED COMPONENTS s3)
    
    2.Cmake生成错误,声明Cmake找不到aws sdk cpp文件,如aws-sdk-cpp-config.Cmake、aws-c-event-stream-config.Cmake。 解决方案:AWS SDK根据查找二进制文件并包含SDK_build安装路径中的文件夹。我们将在~/environment/CMakeLists.txt中添加以下内容

    set(AWSSDK_ROOT_DIR, "/usr/local/")
    
    3.Cmake build声明,在安装sdk_build期间构建共享库时,它正在寻找静态库。 解决方案:aws sdk cpp中的CMakeLists.txt作为共享libs构建到sdk_构建中,看起来在链接过程中没有打开共享libs标志,因此它查找静态libs,我们需要打开它

    set(BUILD_SHARED_LIBS ON)
    

    环境 我用于生成的命令: 安装所需的工具

    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演示的测试输出
    /home/ec2用户/环境中需要的文件/ s3 demo.cpp

    CMakeLists.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})
    
    ./s3-demo my-test-bucket us-west-2
    
    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})