首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将从源构建的app链接到Qt/QML应用程序子app项目?

如何将从源构建的app链接到Qt/QML应用程序子app项目?
EN

Stack Overflow用户
提问于 2022-07-20 05:44:04
回答 1查看 168关注 0票数 0

首先,我对c/c++的了解仅限于编译,其中实用的包括为教育目的编写编译器。现在,我的工作是手动创建AWS S3桶,并将一些文件放入其中并访问Qt应用程序(基本上是c++代码)。

到目前为止,我所做的是用提到的这里步骤来构建AWS。

然后,要创建一个.h文件目录,将源代码撕开,通过power shell脚本只保留.h文件:

代码语言:javascript
运行
复制
$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文件包含

代码语言:javascript
运行
复制
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.hpp

AWSS3Master.hpp

代码语言:javascript
运行
复制
#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对象的函数。

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

代码语言:javascript
运行
复制
#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文件。

代码语言:javascript
运行
复制
cmake ..\aws\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY="s3"

这个方法对吗?还有其他更简单的方法可以将AWS包含到我的Qt应用程序中吗?esp创建pri/pro文件应该比我所做的更容易。我知道MSBuild步骤在C:\Program (X86)\all\bin中创建库文件,它与库一起创建,并包含可以使用的文件夹。

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 17:07:31

最后,在经历了这么多错误之后,我发现在..pro/..pri文件中,您可以在调试和发布之间切换,例如

代码语言:javascript
运行
复制
Debug: AWS_SDK_DIR = "C:/Program Files/AWS/Debug/AWS_BUILD"
Release: AWS_SDK_DIR = "C:/Program Files/AWS/Release/AWS_BUILD"

这就是你放库文件的地方..。中的dll文件

代码语言:javascript
运行
复制
Debug: AWS_SDK_DIR_BIN = "C:/Program Files/AWS/Debug/bin"
Release: AWS_SDK_DIR_BIN = "C:/Program Files/AWS/Release/bin"

最后,只需使用dll包含相应的bin文件夹即可。

像这样

代码语言:javascript
运行
复制
LIBS += -L$${AWS_SDK_DIR_BIN}

而且您的项目在调试和发布模式中都没有问题地编译/构建/运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73046481

复制
相关文章

相似问题

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