热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何规避WindowsUniversalCRT标头对vcruntime.h的依赖性

如何解决《如何规避WindowsUniversalCRT标头对vcruntime.h的依赖性》经验,为你挑选了1个好方法。



1> CristiFati..:

查看[MSDN.Blogs]:介绍Universal CRT(以及它引用的其他URL):

去年6月,我们发表了一篇文章,讨论了我们对Visual Studio 2015Visual C++ C运行时(CRT)所做的主要更改.... 的AppCRTDesktopCRT已经被重新组合成一个单一的库,我们有一个名为通用CRT.新的DLL命名为ucrtbase.dll(release)和ucrtbased.dll(debug); 它们不包含版本号,因为我们将在适当的位置为它们提供服务.

从[MSDN.Blogs]:Great C Runtime(CRT)重构(清除(粗体)粗体项目):

为了统一这些不同的CRT,我们将CRT分为三部分:

    VCRuntime(vcruntime140.dll)...

    AppCRT(appcrt140.dll)...

    DesktopCRT(desktopcrt140.dll)...

根据[MS.Support]:Windows中的Universal C Runtime更新:

当使用Windows 10软件开发工具包(SDK)构建应用程序时,Microsoft Visual Studio 2015会在Universal CRT上创建依赖关系.

从[MS.Dev]:Windows 10 SDK:

注意:针对Windows 10,版本1803(或更高版本)的Windows 10开发需要Visual Studio 2017.以前版本的Visual Studio不会发现此SDK.

因此,U CRT严格限制在VStudio上.通用:意味着它不依赖于VStudio版本(所有VStudio版本都将使用通用版本(只能有一个)).

UCRTUxlibcWin(想要).

我看了一下SDK include dir(例如"c:\ Program Files(x86)\ Windows Kits\10\Include\10.0.15063.0\ucrt"):

每个公共文件(例如stdio.h)都有一个#include

corecrt.h有一个#include

没有#ifdef,所以没有办法(至少不容易)克服这一点.

但是,当达到链接阶段时,事情会更加清晰.如果您的C代码包含UCRT标头,它(很可能)将链接到SDK lib目录中的文件(例如"c:\ Program Files(x86)\ Windows Kits\10\Lib\10.0.15063.0\ucrt\x64"),这是由VStudio生成的,并且很有可能失败.例:

code.c:

//#include 


int main() {
    //printf("Dummy.... sizeof(void*): %d\n", sizeof(void*));
    return 0;
}
e:\Work\Dev\StackOverflow\q045340527>dir /b
code.c

e:\Work\Dev\StackOverflow\q045340527>"c:\Install\x86\Microsoft\Visual Studio Community\2015\VC\bin\cl.exe" -nologo -c -Focode.obj code.c
code.c

e:\Work\Dev\StackOverflow\q045340527>"c:\Install\Google\Android_SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe" -c -o code.o code.c

e:\Work\Dev\StackOverflow\q045340527>dir /b
code.c
code.o
code.obj

2个(生成的)文件不兼容:

e:\Work\Dev\StackOverflow\q045340527>"C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\bin\amd64\dumpbin.exe" -nologo code.obj

Dump of file code.obj

File Type: COFF OBJECT

  Summary

          80 .debug$S
          2F .drectve
           7 .text$mn

e:\Work\Dev\StackOverflow\q045340527>"C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\bin\amd64\dumpbin.exe" -nologo code.o

Dump of file code.o
code.o : warning LNK4048: Invalid format file; ignored

  Summary


e:\Work\Dev\StackOverflow\q045340527>"c:\Install\x64\Cygwin\Cygwin\AllVers\bin\readelf.exe" -d code.o

e:\Work\Dev\StackOverflow\q045340527>"c:\Install\x64\Cygwin\Cygwin\AllVers\bin\readelf.exe" -d code.obj
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start

现在,我知道lld(我记得我过去建了它,但我找不到它,为了测试我的陈述)能够链接ELFCOFF文件格式,但我怀疑它可以组合他们.

结论

基于以上所述,以下是您的问题的答案:

    我认为它是 - 一个不受支持的人(声称某些事情是不可能的几乎总是假的).但是,会有很多限制(考虑上面的文件格式匹配),并且很可能需要一些肮脏的技巧或变通方法(如我现在想到的那样)(如我所能想到的):

    改变它(编辑它的头文件 - 删除不需要的#includes)

    创建一个虚拟的vcruntime.h文件(通过编译阶段)

    在名称中添加VStudio(或其他任何事实)将自动降低其" 普遍性级别 ".
    而这仅仅是1 步:它已经从分离VC运行库.把它想象成一个婴儿.随着时间的推移,它将变得成熟和(更稳定),也许其他编译器/构建工具链将最终支持它(不需要遵循斯巴达规则,并将其抛弃悬崖:) ...至少现在不是这样) .
    但是,我认为只有MS才能得到答案(尽管他们很有可能无法提供更清晰的答案)


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
author-avatar
aaaaaa师太_667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有