gpt4 book ai didi

c++ - SendMessageA 方法的链接错误/冲突

转载 作者:行者123 更新时间:2023-11-30 03:16:17 26 4
gpt4 key购买 nike

我按照以下方式构建了 aws-cpp-sdk:

cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY="s3;sqs;sns"

然后我跑了:

MSBuild.exe INSTALL.vcxproj

在“*C:\Program Files\aws-cpp-sdk-all*”目录中生成了以下文件:

aws-c-common.dll
aws-c-event-stream.dll
aws-checksums.dll
aws-cpp-sdk-access-management.dll
aws-cpp-sdk-access-management.lib
aws-cpp-sdk-cognito-identity.dll
aws-cpp-sdk-cognito-identity.lib
aws-cpp-sdk-core.dll
aws-cpp-sdk-core.lib
aws-cpp-sdk-iam.dll
aws-cpp-sdk-iam.lib
aws-cpp-sdk-sns.dll
aws-cpp-sdk-sns.lib
aws-cpp-sdk-sqs.dll
aws-cpp-sdk-sqs.lib

aws-c-common.lib
aws-c-event-stream.lib
aws-checksums.lib

连同 include 目录。我已经包括了所有的头文件和所有的库:

#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentials.h>
#include <aws/core/client/ClientConfiguration.h>
#include <aws/core/utils/logging/DefaultLogSystem.h>
#include <aws/core/utils/logging/AWSLogging.h>
#include <aws/sns/model/PublishRequest.h>
#include <aws/sns/model/PublishResult.h>
#include <aws/s3/model/ListObjectsRequest.h>
#include <aws/core/utils/Outcome.h>
#include <aws/s3/model/Bucket.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SendMessageRequest.h>

#pragma comment( lib, "aws-cpp-sdk-core.lib" )
#pragma comment( lib, "aws-c-common.lib" )
#pragma comment( lib, "aws-c-event-stream.lib" )
#pragma comment( lib, "aws-checksums.lib" )

#pragma comment( lib, "aws-cpp-sdk-core.lib" )
#pragma comment( lib, "aws-cpp-sdk-iam.lib" )
#pragma comment( lib, "aws-cpp-sdk-sqs.lib" )
#pragma comment( lib, "aws-cpp-sdk-sns.lib" )
#pragma comment( lib, "aws-cpp-sdk-cognito-identity.lib" )
#pragma comment( lib, "aws-cpp-sdk-access-management.lib" )

...

Aws::SQS::SQSClient sqs;
Aws::SQS::Model::SendMessageRequest sm_req;

sm_req.SetQueueUrl( "https://sqs.amazonaws.com/123123" );
sm_req.SetMessageBody( stringJSONFormatted.c_str() );

auto sm_out = sqs.SendMessage(sm_req);
if (sm_out.IsSuccess())
Logger::Log( "Message sent successfully to the AWS SQS" );
else
Logger::Log( "FAILED to send message send to AWS SQS" );

但每当我构建它时,我都会得到:

__declspec(dllimport) public: virtual class Aws::Utils::Outcome<class Aws::SQS::Model::SendMessageResult,class Aws::Client::AWSError<enum Aws::SQS::SQSErrors> > 
__cdecl Aws::SQS::SQSClient::SendMessageA(class Aws::SQS::Model::SendMessageRequest const &)const
(__imp_?SendMessageA@SQSClient@SQS@Aws@@UEBA?AV?$Outcome@VSendMessageResult@Model@SQS@Aws@@V?$AWSError@W4SQSErrors@SQS@Aws@@@Client@4@@Utils@3@AEBVSendMessageRequest@Model@23@@Z)
fatal error LNK1120: 1 unresolved externals

我尝试了所有我能找到的东西,我什至用不同的参数重新构建了库很多次,但同样的问题仍然存在。它似乎与 AWS::SQSClient::SendMessageA 名称与某种 Windows 方法冲突有关(但我可能错了)。有一个解决方案指出,如果我在 AWS header 之前定义它,它应该构建:

#undef GetObject

但是还是一样的错误。有什么建议吗?

最佳答案

问题是 Windows 系统头文件定义了宏 SendMessage扩展到 SendMessageASendMessageW取决于 UNICODE 的存在宏。

它为 Windows API 中的很多函数执行此操作,这当然意味着会与使用在 Windows 中变成宏的符号的其他代码发生冲突。

一个可能的解决方案是 #undef SendMessage#include <windows.h> 之后.如果您尝试构建的代码来自第三方,这可能是不可能的。

关于c++ - SendMessageA 方法的链接错误/冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com