首先,我对c/c++的了解仅限于编译,其中实用的包括为教育目的编写编译器。现在,我的工作是手动创建AWS S3桶,并将一些文件放入其中并访问Qt应用程序(基本上是c++代码)。
到目前为止,我所做的是用提到的这里步骤来构建AWS。
然后,要创建一个.h文件目录,将源代码撕开,通过power shell脚本只保留.h文件:
$folders = Get-ChildItem -Path "D:\qt-aws\xxxxxxxxxx\xxxxxxxxxx" -Filter *.* -Exclude *.h -Recurse
foreach ($file in $folders)
{
if(Test-Path $file -Exclude *.h -PathType leaf)
{
echo "deleting $file"
del $file
}
else
{
}
}
Write-Host "Congratulations! Your first script executed successfully"我的AWSS3Access Qt项目pro文件包含
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
AWS_DIR = "C:/Program Files/AWS"
AWS_SDK_DIR = "C:/Program Files/AWS/AWS_BUILD"
INCLUDEPATH *= $${AWS_DIR}/aws-sdk-cpp/aws-cpp-sdk-s3/include \
$${AWS_DIR}/aws-sdk-cpp/aws-cpp-sdk-core/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/verification/cbmc/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-io/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-mqtt/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-auth/include \
$${AWS_DIR}/aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-sdkutils/include
LIBS *= -L$${AWS_SDK_DIR} -laws-cpp-sdk-s3 \
-L$${AWS_SDK_DIR} -laws-cpp-sdk-core \
-L$${AWS_SDK_DIR} -laws-crt-cpp \
-L$${AWS_SDK_DIR} -laws-c-auth \
-L$${AWS_SDK_DIR} -laws-c-cal \
-L$${AWS_SDK_DIR} -laws-c-common \
-L$${AWS_SDK_DIR} -laws-c-compression \
-L$${AWS_SDK_DIR} -laws-c-event-stream \
-L$${AWS_SDK_DIR} -laws-checksums \
-L$${AWS_SDK_DIR} -laws-c-http \
-L$${AWS_SDK_DIR} -laws-c-io \
-L$${AWS_SDK_DIR} -laws-c-mqtt \
-L$${AWS_SDK_DIR} -laws-c-s3 \
-L$${AWS_SDK_DIR} -laws-c-sdkutils
SOURCES += \
AwsS3Master.cpp \
main.cpp
HEADERS += \
AwsS3Master.hppAWSS3Master.hpp
#ifndef AWSS3MASTER_HPP
#define AWSS3MASTER_HPP
#define USE_IMPORT_EXPORT
#include <iostream>
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/ListObjectsRequest.h>
#include <aws/s3/model/GetObjectRequest.h>
#include <aws/s3/model/Object.h>
#include <aws/core/auth/AWSCredentialsProvider.h>
#include <fstream>
#include <QString>
#include <QStringList>
class AwsS3Master
{
public:
AwsS3Master();
void listObjects();
void setBucket(const Aws::String& bucketName);
void setRegion(const Aws::String& region);
private:
Aws::String _region{"region"};
Aws::String _bucket{"bucket"};
Aws::String accessKey{"XXXXXXXXXXXXXXXXXX"};
Aws::String accessSecret{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
};
#endif // AWSS3MASTER_HPP并且cpp文件AWSS3Master.cpp文件有一个名为list对象的函数。
void AwsS3Master::listObjects()
{
Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::Client::ClientConfiguration clientConfig;
if (!_region.empty())
{
clientConfig.region = _region;
}
Aws::Auth::AWSCredentials credentials;
credentials.SetAWSAccessKeyId(Aws::String(accessKey));
credentials.SetAWSSecretKey(Aws::String(accessSecret));
Aws::S3::S3Client s3_client(credentials, clientConfig);
// s3_client.
Aws::S3::Model::ListObjectsRequest objects_request;
objects_request.WithBucket(_bucket);//.WithPrefix("some-prefox");
bool isDone = false;
bool isFailed= false;
Aws::S3::Model::ListObjectsOutcome outcome;
int c=0;
while(!isDone) {
outcome=s3_client.ListObjects(objects_request);
if(!outcome.IsSuccess()) break;
//process
Aws::Vector<Aws::S3::Model::Object> object_list = outcome.GetResult().GetContents();
for (auto const &s3_object : object_list)
{
std::cout << "* " << s3_object.GetKey() << std::endl;
c++;
}
std::cout<<"--------- Break"<<c<<"\n";
isDone=!outcome.GetResult().GetIsTruncated();
if(!isDone) {
//objects_request.SetMarker(outcome.GetResult().GetNextMarker());
objects_request.SetMarker(outcome.GetResult().GetContents().back().GetKey());
}
}
std::cout << "Count "<<c<<"\n";
//check isFailed
if(!outcome.IsSuccess()) {
std::cout << "ListObjects error: " <<
outcome.GetError().GetExceptionName() << " " <<
outcome.GetError().GetMessage() << std::endl;
}
}
Aws::ShutdownAPI(options);
}main.cpp有
#include <iostream>
#include <AwsS3Master.hpp>
using namespace std;
int main()
{
AwsS3Master awss3;
Aws::SDKOptions options;
//TODO: Change bucket_name to the name of a bucket in your account.
const Aws::String bucket_name = "xxxxxxxxxxxxxx";
//TODO: Set to the AWS Region in which the bucket was created.
const Aws::String region = "xxxxxxxxxxx";
std::cout << "Beginning of file contents:\n";
awss3.setBucket(bucket_name);
awss3.setRegion(region);
awss3.listObjects();
return 0;
}所有这些都是列出桶中的文件..。--我想把这个项目作为另一个项目的子项目,使用它来访问s3桶。我正试图把头脑集中在静态链接和动态链接库等方面。
我使用了源文件、命令生成的.h文件和.dll文件。
cmake ..\aws\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY="s3"这个方法对吗?还有其他更简单的方法可以将AWS包含到我的Qt应用程序中吗?esp创建pri/pro文件应该比我所做的更容易。我知道MSBuild步骤在C:\Program (X86)\all\bin中创建库文件,它与库一起创建,并包含可以使用的文件夹。
发布于 2022-07-26 17:07:31
最后,在经历了这么多错误之后,我发现在..pro/..pri文件中,您可以在调试和发布之间切换,例如
Debug: AWS_SDK_DIR = "C:/Program Files/AWS/Debug/AWS_BUILD"
Release: AWS_SDK_DIR = "C:/Program Files/AWS/Release/AWS_BUILD"这就是你放库文件的地方..。中的dll文件
Debug: AWS_SDK_DIR_BIN = "C:/Program Files/AWS/Debug/bin"
Release: AWS_SDK_DIR_BIN = "C:/Program Files/AWS/Release/bin"最后,只需使用dll包含相应的bin文件夹即可。
像这样
LIBS += -L$${AWS_SDK_DIR_BIN}而且您的项目在调试和发布模式中都没有问题地编译/构建/运行。
https://stackoverflow.com/questions/73046481
复制相似问题