0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在windows上安装或执行程序遇到的runtime是什么?

Q4MP_gh_c472c21 ? 来源:写个解 ? 作者:吴梦龙 ? 2021-03-17 09:51 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

??什么是runtime

在windows上安装或执行程序,都有机会遇到词汇——runtime。

CRT(C runtime library)

Microsoft Access 2016 Runtime

microsoft visual c++ runtime library

C Runtime

Visual C++ 2008 Runtime

.NET Common Language Runtime

runtime究竟是什么,首先runtime在英文里是合成单词,无论是英文还是中文都容易在文字层面被误解,中文直译“运行时”,中文的断句容易引起歧义,究竟是“运行、时”还是“运行时”傻傻分不清。

为了准确描述runtime的实际意思,我认为runtime换成execution environment理解起来更容易:即位应用程序的执行准备运行环境。

运行时库是在编译时使用的特殊库,用于在计算机程序的执行中实现内置于编程语言中的功能,包括:输入、输出、内存管理。

crt0

比如C语言需要的最小runtime叫做crt0(C runtime)。“crt”代表 “c runtime”,“0”代表“最基本、最开始”。crt0应该包含如下7个步骤。异常向量配置

_start函数和stack初始化

cache 初始化

清除BSS

构造函数和析构函数处理

C初始化功能

调用main入口这个crt0的结构看起来是不是很熟悉?没错,在u-boot源码启动代码看到类似结构。

.text.globl _start_start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program

crt0.S编译生成crt0.o,今后gcc编译的所有应用程序前都加上这段内容,既然有crt0,那么再发挥想象力,是不是还会有crt1什么的呢,全盘搜索看到若干crt前缀的*.o文件,这些crt*.o文件合并起来被称做 “runtime library”

运行时库和标准库区别

运行时库(runtime library)与标准库(standard library)不是一个东西。

标准库和运行库之间有一个非常重要的区别。尽管标准库定义了程序员可以使用的功能,但不是编程语言的规范的一部分,至少在C语言中不是,运行时库却时程序运行所必需的部分。

举个例子,printf()是C标准库的一部分,程序的启动是在运行时库实现的,启动过程对程序员不可见,因此,你编写的程序可以不使用标准库,但始终需要运行时库,否则无法运行。老实说,在操作系统上编写不使用标准库的应用程序几乎无实际意义,那样的程序没有访问外设的方法、屏幕上不会输出令人印象深刻的结果。在裸机上情况就不一样了,访问外设不需要系统调用,没有系统的权限隔离,外设的寄存器也有读写权限。

简单编写一个只有main

int main(int argc, char **argv){ return 0;}

编译后看看符号表:gcc a.c

readelf -s a.out很多不知那来的函数符号都来源与crt*.o,如register_tm_clones源于crtbegin.o;__data_start、__libc_start_main源于crt1.o

31: 0 FILE LOCAL DEFAULT ABS crtstuff.c32: 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones33: 0 FUNC

LOCAL DEFAULT 13 register_tm_clones34: 0 FUNC

LOCAL DEFAULT 13 __do_global_dtors_aux35: 1 OBJECT LOCAL DEFAULT 24 completed.732536: 0 OBJECT

LOCAL DEFAULT 19 __do_global_dtors_aux_fin37: 0 FUNC LOCAL DEFAULT 13 frame_dummy38: 0 OBJECT

LOCAL DEFAULT 18 __frame_dummy_init_array_39: 0 FILE LOCAL DEFAULT ABS a.c40: 0 FILE

LOCAL DEFAULT ABS crtstuff.c41: 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__42: 0 FILE

LOCAL DEFAULT ABS 43: 0 NOTYPE LOCAL DEFAULT 18 __init_array_end44: 0 OBJECT

LOCAL DEFAULT 20 _DYNAMIC45: 0 NOTYPE LOCAL DEFAULT 18 __init_array_start46: 0 NOTYPE

LOCAL DEFAULT 16 __GNU_EH_FRAME_HDR47: 0 OBJECT LOCAL DEFAULT 22 _GLOBAL_OFFSET_TABLE_48: 0 FUNC

LOCALDEFAULT 10 _init49: 1 FUNC GLOBAL DEFAULT 13 __libc_csu_fini50: 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab51: 0 NOTYPE WEAK DEFAULT 23 data_start52: 0 NOTYPE GLOBAL DEFAULT 23 _edata53: 0 FUNC GLOBAL HIDDEN 14 _fini54: 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@@GLIBC_55: 0 NOTYPE GLOBAL DEFAULT 23 __data_start56: 0 NOTYPE WEAK DEFAULT UND

__gmon_start__57: 0 OBJECT GLOBAL HIDDEN 23 __dso_handle58: 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used59: 93 FUNC GLOBAL DEFAULT 13 __libc_csu_init60: 0 NOTYPE GLOBAL DEFAULT 24 _end61: 43 FUNC GLOBAL DEFAULT 13 _start62: 0 NOTYPE GLOBAL DEFAULT 24 __bss_start63: 18 FUNC GLOBAL DEFAULT 13 main64: 0 OBJECT GLOBAL HIDDEN 23 __TMC_END__65: 0 NOTYPE WEAK DEFAULT UND

_ITM_registerTMCloneTable66: 0 FUNC WEAK DEFAULT UND __cxa_finalize@@GLIBC_2.2

原文标题:runtime是什么

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    4

    文章

    3615

    浏览量

    91586
  • C语言
    +关注

    关注

    180

    文章

    7633

    浏览量

    142115

原文标题:runtime是什么

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序怎么解决?

    keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序,这个怎么解决?烧录器用的是jlink
    发表于 07-18 06:08

    使用英特尔? NPU 插件C++运行应用程序时出现错误:“std::Runtime_error at memory location”怎么解决?

    使用OpenVINO?工具套件版本 2024.4.0 构建C++应用程序 使用英特尔? NPU 插件运行了 C++ 应用程序 遇到的错误: Microsoft C++ exception: std::
    发表于 06-25 08:01

    为什么无法运行程序“make”(目录“C:\\?

    FX2LP Build,得到了 14:26:46 **** 为项目 Fx2Test 构建配置调试 **** 全部制作 无法运行程序“make”(目录“C
    发表于 05-15 08:26

    USB串行Windows驱动程序安装程序无法下载是怎么回事?

    USB 串行 Windows 驱动程序安装程序无法下载
    发表于 05-07 08:09

    Windows安装OpenVINO?运行时遇到错误怎么解决?

    已在 Windows* 安装OpenVINO?运行时。 配置环境变量。 遇到错误: Location is not available.
    发表于 03-05 09:13

    Windows? 11安装OpenVINO? 2021.4时,安装程序崩溃了,安装失败怎么解决?

    Windows? 11 安装OpenVINO? 2021.4 时,安装程序崩溃了,
    发表于 03-05 06:50

    如何实现Windows应用在Linux系统的无缝运行

    统信 Windows 应用兼容引擎 V3.0 的推出,让用户可以 deepin 系统直接双击.exe文件运行 Windows 应用程序
    的头像 发表于 12-30 09:51 ?1658次阅读
    如何实现<b class='flag-5'>Windows</b>应用在Linux系统<b class='flag-5'>上</b>的无缝运行

    微软已放弃Windows 11显示不兼容水印计划

    水印的计划。 此前,微软曾计划在Windows 11系统中引入一种新机制,即为那些不兼容当前系统的应用程序硬件显示特定的水印,以提醒用户注意潜在的问题。然而,这一计划在实施前似乎遭遇了诸多挑战和争议,引发了部分用户和开发者的不
    的头像 发表于 12-25 14:43 ?619次阅读

    如何在Windows安装Ubuntu系统

    Windows安装Ubuntu系统通常有两种方法:使用虚拟机软件安装Ubuntu作为虚拟机,或者使用双启动安装Ubuntu与
    的头像 发表于 12-12 14:29 ?2204次阅读

    将AFE5818与TSW1400连接好,按照说明运行程序后出现了error 1003的问题,怎么解决?

    我将AFE5818与TSW1400连接好后,按照说明运行程序后,出现了以下问题 我换了一台pc后又出现了error 1003的问题,我使用的是windows11,安装了.Net
    发表于 11-19 07:52

    Ubuntu 24.04 LTS安装飞桨PaddleX

    前面我们介绍了《Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0? 是基于飞桨框架构建的一站式全流程开发工具,它集成
    的头像 发表于 11-11 17:45 ?918次阅读
    <b class='flag-5'>在</b>Ubuntu 24.04 LTS<b class='flag-5'>上</b><b class='flag-5'>安装</b>飞桨PaddleX

    WINDOWS XP安装工具TLV320AIC310xEVM_v1.0.1出现错误\"Fatal Error怎么解决?

    WINDOWS XP安装工具TLV320AIC310xEVM_v1.0.1出现错误\"Fatal Error!! Required NIPathDir property NIS
    发表于 10-24 08:13

    TLV320AIC3204IRHBR能否用于HD Audio的?WindowsLinux是否有相应的驱动呢?

    TLV320AIC3204IRHBR能否用于HD Audio的,WindowsLinux是否有相应的驱动呢?
    发表于 10-14 06:49

    如何使用主令电器行程开关横板安装方式

    使用过程中应注意避免对行程开关造成冲击振动以免影响其正常工作。同时应避免潮湿、腐蚀等恶劣环境下使用行程开关以免损坏其内部元件。
    的头像 发表于 09-12 11:05 ?1071次阅读

    labview生成可执行程序后vi都在同一路径下吗

    LabVIEW中,当您生成可执行程序(exe文件)后,VI(虚拟仪器)并不直接以文件的形式存在于可执行文件的同一物理路径下。实际,LabVIEW的可
    的头像 发表于 09-04 17:06 ?1397次阅读