首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SendMessageA方法的链接错误/冲突

SendMessageA方法的链接错误/冲突
EN

Stack Overflow用户
提问于 2019-06-05 15:03:43
回答 2查看 161关注 0票数 1

我以以下方式构建了aws:

代码语言:javascript
复制
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY="s3;sqs;sns"

之后我跑了:

代码语言:javascript
复制
MSBuild.exe INSTALL.vcxproj

它在"*C:\Program \aws all*“目录中生成以下文件:

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

以及包含目录。我已经包含了所有的标题和所有库:

代码语言:javascript
复制
#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" );

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

代码语言:javascript
复制
__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头之前定义了这一点,那么它应该构建:

代码语言:javascript
复制
#undef GetObject

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-05 15:11:09

问题是,Windows定义宏SendMessage以扩展为SendMessageASendMessageW,这取决于UNICODE宏的存在。

它用于Windows中的许多函数,这当然意味着与使用符号的其他代码发生冲突,这些符号在Windows中被证明是宏。

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

票数 1
EN

Stack Overflow用户

发布于 2019-06-05 15:15:58

您可能想看看这篇博客文章,以获得详细的解释。

你可以尝试:

代码语言:javascript
复制
#undef SendMessage

在包含AWS头之前(类似于您在问题中引用的#undef GetObject )。

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

https://stackoverflow.com/questions/56463178

复制
相关文章

相似问题

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