如何在VS2010中构建Interactive Brokers API c++测试套接字客户端?
How can the Interactive Brokers API C++ test socket client be built with VS2010
按照这里给出的说明http://www.interactivebrokers.com/php/apiUsersGuide/apiguide.htm#apiguide/c/using_the_c__testsocketclient_sample_program.htm在Visual Studio Professional 2010中,c++项目总是给出以下输出:
1> Generating Code...
1>LIBCMT.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invoke_watson@@YAXPBG00II@Z) already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in libcmtd.lib(invarg.obj)
1> Creating library C:SyncingVCPlusPlusIBTestSocketClientVS2010DebugSampleSocketClient.lib and object C:SyncingVCPlusPlusIBTestSocketClientVS2010DebugSampleSocketClient.exp
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>C:SyncingVCPlusPlusIBTestSocketClientVS2010DebugSampleSocketClient.exe : fatal error LNK1169: one or more multiply defined symbols found
1>
1>Build FAILED.
1>
1>Time Elapsed 00:01:30.63
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
如果有人有这样的经验或知道如何修复这个错误,将不胜感激!
我想我已经为你找到答案了。我遵循了错误LNK2005描述的指示,它表明在幕后发生了一些双重链接的事情。
你唯一需要做的就是改变你的项目的属性配置:
Properties->Linker->Input->Ignore Specific Default Libraries
在这里,你应该设置你想忽略的库libcmt.lib。设置完成后,您应该看到Ignore Specific Default Libraries的值为:
libcmt.lib;%(IgnoreSpecificDefaultLibraries)
然后构建,binggo~~~~请尝试一下
看起来您需要修复您的库引用。从下面的错误来看,你的项目同时引用了发布和调试版本,因此链接器不确定在哪里寻找特定的符号,因为它在多个地方(包括调试和发布)定义:
BlockquoteLIBCMT.lib(invarg.obj):错误LNK2005: __pinvalidarghandler已经定义在libcmtd.lib(invarg.obj)
如果您没有引用任何库,而IB dll在幕后执行此操作,您可能需要通过VS.
问题是PosixSocketClient代码假设当使用Microsoft编译器编译时,将使用Microsoft Foundation Library (MFC)。也许它过去是这样工作的,但我从来没有让它与VS2010一起工作。但我确实通过删除对/链接与MFC的依赖而使其工作。
不幸的是,如果定义了_MSC_VER
,则Shared
子文件夹中的代码将自动假定为MFC。(_MSC_VER
给出了微软c++编译器的版本)。它不能被简单地undef
化,因为一些标准的Windows头文件使用它。这显然是一个bug,因为MFC的存在是由_MFC_VER
发出的,而不是_MSC_VER
。因此我必须改变
#ifdef _MSC_VER
EClientSocketBaseImpl.h into
#ifdef _MFC_VER
另外,在文件_StdAfx.h中,#include <afxwin.h>
应该另外包装在条件编译指令中:
#ifdef _MFC_VER
#include <afxwin.h>
#endif
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 使用Qt框架在c ++类中创建API调用
- Libreoffice API (UNO):需要更改用户的 xTextField 文本
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 使用 Python Extension API 包装复杂C++类
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 第三方 API 中的编译错误 - Visual Studio
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- Issues with Win32 ReadProcessMemory API