草庐IT

vc_runtimeMinimum_x

全部标签

c++ - 从 MinGW .a 转换为 VC++ .lib

我有一个旧库(用C++编写),我只能在Windows上的MinGW+MSYS32上构建它。由此我可以生成一个从GNUlibtool生成的.a静态库文件。我的主要开发是在VisualStudio2008中完成的。如果我尝试使用MinGW生成的库并将其链接到VisualStudio中,它会提示缺少外部组件。这很可能是由于已完成的C++符号重整,并且它与.a文件中的内容不匹配。有什么已知的方法可以将静态.a文件转换为VC++库格式吗? 最佳答案 如果符号被不同地破坏,编译器正在使用不同的ABI,你将无法“转换”或任何编译的库:名称以不同方

c++ - NULL 直接传递给需要 const 引用参数的函数 (VC++ 4.2)

我正在查看我在旧代码库中发现的一些东西,我很困惑。这是一个函数定义:voidvUpdateSequenceDetailsAndIncrement(constCallEvent&roCPEvent,constCallInfo&roCallInfo,BOOLbCreationEvent);这里是这样调用的:vUpdateSequenceDetailsAndIncrement(roCPEvent,NULL,FALSE);此处NULL被直接传递给引用参数roCallInfo。该函数最终调用:vTimeChange(*pSeqDetails,roCPEvent,roCallInfo);定义:vo

c++ - ms vc++ iostream 编译错误

MicrosoftVisualC++2010Express中的以下代码:#include//usingnamespacestd;intmain(intargc,char**argv){return(0);}给我错误:1>C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\include\cmath(19):errorC2061:syntaxerror:identifier'acosf'...1>C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\include\cmath(41):fatalerrorC1003

c++ - Boost 或 VC10 的 TR1 - 哪个更好?

我目前正在从VisualStudio2008迁移到2010。我的软件大量使用了Boost及其TR1功能。我现在遇到很多编译器错误,因为VC10有它自己的TR1实现。我知道我可以使用_HAS_CPP0X开关禁用Microsoft的TR1实现(请参阅here),但我不确定这是否还会禁用将来可能有趣的其他功能。所以,我想知道哪个是TR1的更好实现:来自Boost的还是来自Microsoft的?有什么不同吗?禁用Microsoft实现是否有任何缺点? 最佳答案 如果您的代码不能使用VC10的标准库进行编译,那么这可能表明它不符合标准。VC1

c++ - std::promise 的 VC++ 实现

我对std::promise的VC++实现(VisualStudio2015和2017)有一个奇怪的问题。set_value_at_thread_exit()似乎没有像宣传的那样工作——或者我可能误解了标准允许的内容和不允许的内容。以下代码在clang中编译和运行良好,但在使用VS2015(在第二个block中)或VS2017(在第三个block中)编译时会崩溃:#include#include#includeintmain(){{std::coutpromise;autof=promise.get_future();std::thread([](std::promisep){p.se

c++ - 关于 VC++ 和 Sun Studio 中字段初始化顺序、符号比较和未使用变量的警告

我希望为以下C++编译问题和相应的编译器启用警告:未使用的变量--SunStudioCC示例:voidm(){inti=10;}有符号与无符号比较-VC++和SunStudioCC示例:if((unsigned)10错误的字段初始化顺序-VC++和SunStudioCC示例:classA{inti,j;A():j(0),i(0){}};所有这些都被GCC捕获,我想在VC++和SunStudio中启用它们。bash-4.1$g++-Wallmain.cppmain.cpp:Infunction‘voidm()’:main.cpp:1:warning:comparisonbetweensi

c++ - 在 VC++ 中确定未初始化的变量

我有这段代码,#includevoidfoo(int*a){std::cout很明显,正在使用未初始化的变量。我试过了/RTCu以及依赖errorC4700,但对于上面的代码,编译器不会将其标记为错误。我还尝试运行代码分析,它报告说代码片段没有问题。那么在我们的源代码中确定未初始化变量的可靠方法是什么?我知道valgrind在这里做得很好,但它不是我的选择,因为我有很多对WindowsAPI和MFC的调用。 最佳答案 编译器没有可靠的方法来确定所有未初始化变量的情况。Valgrind(和其他类似工具)不是编译器,而是动态分析工具,如

c++ - 模板代码在 G++ 下工作正常,但在 VC++ 下出错

下面是代码,在g++下运行良好,但在VC++2014下出错:templatestructExpression{public:staticconstintstatus=A::status_;};structFoo:publicExpression{staticconstintstatus_=0;};intmain(void){return0;}为什么?谢谢!错误信息是:errorC2039:'status_':isnotamemberof'Foo'errorC2065:'status_':undeclaredidentifiererrorC2131:expressiondidnoteva

c++ - Visual C++ 2017 Redistributable 包是否支持使用 VC2015 的应用程序?

如果我只在我的机器上安装VisualC++2017Redistributable,它能支持为2015编写的应用程序吗换句话说,如果我卸载VisualC++2015Redistributable并安装VisualC++2017Redistributable,所有应用程序都可以正常运行吗? 最佳答案 不,他们不会工作可再发行包是一个.exe,它会安装所需的DLLmsvcrtXXXX.dll每个版本XXXX发生变化(VS2017、VS2015、...)它也不被引用计数,这意味着无论有多少人安装它,一次卸载都会撕掉文件。更新VisualSt

c++ - vc142 和 2019 可再发行包与 vc141 的比较

在部署使用vc142构建的C++应用程序时,是否有理由(我想是的,但我试图发现它)安装2019可再发行组件,因为应用程序似乎与以前的可再发行组件包(即将推出与vc141)?我记得两者都是二进制兼容的,但不仅如此,msvcp140.dll和vcruntime140.dll的dumpbin/exports从2017年开始2019年可再发行产生相同的输出;文件大小也相同。我错过了什么吗? 最佳答案 显然没有问题,库是兼容的,请参阅:https://learn.microsoft.com/en-us/cpp/porting/binary-c