c++ Rest SDK和微软单元测试同时使用失败

Failed to use C++ Rest SDK and Microsoft unit test at the same time

本文关键字:失败 单元测试 Rest SDK 微软 c++      更新时间:2023-10-16

我有一个MFC项目,它在Visual Studio 2012下使用c++ Rest SDK (Casablanca)来实现http客户端连接,并且可以很好地编译。
然后我添加了一个Microsoft单元测试项目,但是我不能成功地构建单元测试项目。
在我的主要项目中,环境设置为"在静态库中使用MFC""无公共语言运行时支持""多线程调试(/MTd)"。我的测试项目的环境与主项目相同。错误信息显示:

" error LNK2005: "void * __cdecl operator new[](unsigned int)"(??_U@YAPAXI@Z)已经在libcpmtd.lib(newaop.obj)中定义。"

此外,我还尝试将测试项目的环境更改为"公共语言运行时支持(/clr)"answers"多线程调试DLL (/MDd)"。原来的错误消失了,但是新的错误出现了:

"使用/clr或/clr:pure编译时不支持error C1189: #error: "。C:program files (x86)microsoft visual studio 11.0vcincludeatomic line 9 "

我不知道如何克服这些问题。谁能给我一些建议或解决办法?谢谢。

CRT库对new、delete函数使用弱外部链接。MFC库还包含新的delete函数。这些函数要求在链接CRT库之前链接MFC库。请查看http://support.microsoft.com/kb/148652

基于VS2005的

方案:

进入project>properties>configuration property>linker>input

add to "→Nafxcwd。自由Libcmtd.lib

添加到"忽略特定库"→Nafxcwd.lib; Libcmtd.lib

我发现通过使用NuGet Packmanager获得restsdk,即搜索Casablanca并选择cpprestsdk.v140.windesktop。这样可以确保所有所需的dll和库都被引用。

请检查:https://github.com/Microsoft/cpprestsdk/wiki/How-to-use-the-C--Rest-SDK-NuGet-package

http://codename26.rssing.com/chan-8623770/all_p85.html