根据我的观察,MinGW使用MSVCRT用于C,而libstdc++用于C++。如果是这样,他们如何合作?而且,为什么不统一支持C和C++,无论是MSVCRT+MSVCPRT还是glib+libstdc++。我认为MSVCRT和libstdc++之间的混合听起来很糟糕。那为什么MinGW还是选择了这个呢?链接:C99|MinGWMinGW|MinGWCRTLibraryFeaturesDescriptionofthedefaultCandC++librariesthataprogramwilllinkwithwhenbuiltbyusingVisualC++以下是我的观察,如果你能回答
在Windows中,有一个默认的C库msvcrt.dll。是否可以编写仅使用msvcrt.dll函数的简单C程序?这样就无需安装最新的VC运行时。我认为一种可能的方法是显式指定/NODEFAULTLIB,并使用dll导入过程导入msvcrt.dll函数。有人知道吗? 最佳答案 您可以使用MinGW-w64GCC,它链接到msvcrt.dll正是出于您所说的原因。您可以找到下载here.如果您不想重新分发任何DLL,您可以使用-static-libgcc-static-libstdc++链接您的程序。也就是说,您只需将msvcr*.d
我在旧的C++项目上启动了一个控制台应用程序。在main(intargc,char**argv)中设置断点开始program.exe-debug。根据调试器,argc变为32,argv中的字符串具有奇怪的随机值。继续执行时发生访问冲突,因为argv中的字符串指向无效值。这可能是什么原因造成的? 最佳答案 链接器设置了错误的入口点。对于普通的控制台应用程序,这应该是mainCRTStartup(调试器显示__tmainCRTStartup)。有一个无效的入口点导致main查看堆栈中“碰巧”的内容。发布这个是因为它不是很容易找到。
是否可以控制MSC运行时库(VisualStudio2013、2015)使用哪些CPU指令集?如果我进入cos()的反汇编程序,代码将与一组预先计算的CPU功能进行比较,然后使用CPU上可用的“最佳”功能执行该功能。问题在于不同的指令集产生不同的结果,因此结果因CPU架构而异。例如,构建一个64位可执行文件:std::cout在Haswell/Broadwell上,之后返回0.81743370050726594(与x86相同)。在旧CPU上返回0.81743370050726583。运行时库使用FMAinstructionset如果可用,执行不同的实现并产生不同的结果。请注意,这不受应
这个问题专门针对不可移植的MSVCABI内容。我正在尝试用显然不可移植但不神奇的C++编写与C++的typeid等效的代码。对于ItaniumABI(在Linux/Mac上使用),它非常简单:conststd::type_info&dynamicast_typeid(void*mdo){std::type_info**vptr=*reinterpret_cast(mdo);std::type_info*typeinfo_ptr=vptr[-1];return*typeinfo_ptr;}所以现在我正在查看64位MSVCABI,该死的,我被难住了。对于非常简单的类,即以偏移量0处的vfp
我用过this作为引用,但它似乎并不完整。当我设置/NODEFAULTLIB时,我收到有关缺少__except_list、__load_config_used以及其他一些显然与SEH相关的内容的链接器错误。很容易让_CxxThrowException和friend正确链接,但我不知道__except_list应该是什么,我不知道从哪里开始寻找。我同时使用MSC和IC。使用IC时,链接器报告__except_list丢失,但MSC不是这种情况。对于那些最喜欢回答“为什么?”的人来说:这是因为我想知道它是如何工作的,而且我厌倦了无所事事地测试应用程序,一开始就毫无理由地提交300kb。
这个问题在这里已经有了答案:ResolvingLNK4098:defaultlib'MSVCRT'conflictswith(5个答案)关闭4年前。我正在VisualC++2008中构建一个项目,这是一个基于MFC的示例应用程序,用于我很快将在我自己的项目中使用的静态C++类库。在构建调试配置时,我得到以下信息:warningLNK4098:defaultlib'MSVCRT'conflictswithuseofotherlibs;use/NODEFAULTLIB:library使用推荐选项(通过将“msvcrt”添加到调试配置的项目链接器设置中的“忽略特定库”字段)后,程序链接并运行
我正在使用vs2010,每当我构建任何Windows应用程序(不使用mfc或标准库-仅原始api)时,msvcrt.dll都会链接到它。有很多应用程序是在vs上编译的,但没有这种依赖性。如何从我的应用程序中删除msvcrt.dll依赖项。 最佳答案 那是C运行时库,没有运行时就无法构建C++程序。对于VisualStudio2010,您实际上会链接msvcr100.dll,因为这是该版本编译器的MSVC运行时。普通的旧msvcrt.dll是MSVC6运行时,现在作为Windows系统组件提供。如果您的可执行文件链接到msvcrt.d
我想问问msvcr100是否比msvcrt有优势,优势是什么。当使用msvc编译器编译时,我得到的可执行文件链接到msvcr100,因此它需要安装MSVisualC++Redistributable。如果我用g++(mingw)编译它,那么就没有这样的要求。我猜它链接到msvcrt,而不是。我更喜欢将依赖关系保持在最低限度,所以我想知道使用链接到mscvr100的编译器是否有任何意义。谢谢。 最佳答案 Msvcrt.dll是一个私有(private)DLL,仅供Windows本身使用。不同版本的Windows有不同版本的msvcrt
很抱歉,如果有人问过这个问题。就像我可以在C#项目中选择我希望它为.NET2.0运行时构建一样,是否可以针对较旧的CRT构建nativeC++项目,比方说来自visualstudio2005的项目?我喜欢这个,因为我有使用VS2005构建的外部SDK,但我想使用更新的IDE。 最佳答案 您可以针对2005和2008(也可以考虑2003)进行构建,只要它们与2010一起安装即可。您需要更改每个项目的平台工具集以反射(reflect)您要构建的平台(属性->常规->平台工具集),其中v100为2010、v902008、v802005等等