与 AWS SDK 的链接问题
Linking issues with AWS SDK
我对 AWS SDK 和 Linux 的了解有限,但我一直在阅读 GCC 和 CMake 语法并尝试让自己编译 运行 AWS 上的示例 https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cplusplus.html#sample-cplusplus-sdk.这是我第二次尝试解决这个问题。
这是我运行宁的环境:
- AWS Linux 云 9
- gcc (GCC) 7.2.1 20170915(红帽 7.2.1-2)
- GNU 制作 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)
我的modules/directories:
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&)
的一些链接问题
我想知道的:
我知道 -L 有助于识别我要使用的共享库文件夹,-l 有助于识别我要使用的共享文件。但是,我已经读到,当按照网站上的说明构建上面的 AWS 项目时,目标和标志应该自动填充,我不需要做任何特殊的链接来让这个项目工作。
看起来 aws-cpp-sdk-core 和 aws-cpp-sdk-s3 在我的源文件夹 aws-sdk-cpp 中。这应该在我的构建文件夹 sdk_build 中吗?我是否正确编译了我的项目?
如何在源文件夹外构建一个成功的 aws-sdk-cpp,我应该在 aws-sdk-cpp 中构建一个源内文件夹吗?
感谢任何对我的问题的帮助。
我在构建过程中发现的问题和相应的解决方案:
1. 未定义的链接器问题,无法从 sdk_build.
中找到依赖项
解决方案:使用CMakeLists.txt的find_package中的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 根据AWSSDKConfig.cmake 查找二进制文件并包含sdk_build 安装路径中的文件夹。我们将在 ~/environment/CMakeLists.txt 中添加以下内容
set(AWSSDK_ROOT_DIR, "/usr/local/")
3. Cmake build 声明在 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++ Sample:
安装所需的工具
sudo yum -y install gcc72 gcc72-c++
sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3
在 home/ec2-user/environment/
上构建项目
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-demo 的测试输出
./s3-demo my-test-bucket us-west-2
/home/ec2-user/environment/
中需要的文件
s3-demo.cpp
get your code in this link
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})
我对 AWS SDK 和 Linux 的了解有限,但我一直在阅读 GCC 和 CMake 语法并尝试让自己编译 运行 AWS 上的示例 https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cplusplus.html#sample-cplusplus-sdk.这是我第二次尝试解决这个问题。
这是我运行宁的环境:
- AWS Linux 云 9
- gcc (GCC) 7.2.1 20170915(红帽 7.2.1-2)
- GNU 制作 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)
我的modules/directories:
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&) 的一些链接问题
我想知道的:
我知道 -L 有助于识别我要使用的共享库文件夹,-l 有助于识别我要使用的共享文件。但是,我已经读到,当按照网站上的说明构建上面的 AWS 项目时,目标和标志应该自动填充,我不需要做任何特殊的链接来让这个项目工作。
看起来 aws-cpp-sdk-core 和 aws-cpp-sdk-s3 在我的源文件夹 aws-sdk-cpp 中。这应该在我的构建文件夹 sdk_build 中吗?我是否正确编译了我的项目?
如何在源文件夹外构建一个成功的 aws-sdk-cpp,我应该在 aws-sdk-cpp 中构建一个源内文件夹吗?
感谢任何对我的问题的帮助。
我在构建过程中发现的问题和相应的解决方案:
1. 未定义的链接器问题,无法从 sdk_build.
中找到依赖项解决方案:使用CMakeLists.txt的find_package中的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 根据AWSSDKConfig.cmake 查找二进制文件并包含sdk_build 安装路径中的文件夹。我们将在 ~/environment/CMakeLists.txt 中添加以下内容
set(AWSSDK_ROOT_DIR, "/usr/local/")
3. Cmake build 声明在 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++ Sample:
安装所需的工具
sudo yum -y install gcc72 gcc72-c++
sudo yum -y install libcurl-devel openssl-devel libuuid-devel cmake3
在 home/ec2-user/environment/
上构建项目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-demo 的测试输出
./s3-demo my-test-bucket us-west-2
/home/ec2-user/environment/
中需要的文件s3-demo.cpp get your code in this link
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})