首页 > 其他分享 > 129.动态编译与静态编译

129.动态编译与静态编译

时间:2023-08-02 21:45:35浏览次数:46  
标签:静态 程序 编译 129 动态 程序代码 库函数

129.动态编译与静态编译

1.静态编译

静态编译是将程序代码和库函数一起编译成一个可执行文件的过程。在静态编译过程中,程序代码和库函数的代码被组合在一起,形成一个独立的可执行文件,该文件可以在任何系统上运行,因为它包含了所有所需的代码和库函数。

1.1优点:

1.程序在运行时不需要依赖任何外部库函数,因此可以保证程序的稳定性和可移植性。
2.程序的性能通常比动态编译的程序要高,因为它不需要在运行时加载库函数。

1.2缺点:

1.程序的体积通常比较大,因为所有的库函数都被编译进了可执行文件中。
2.如果库函数发生变化,需要重新编译整个程序。

2.动态编译

动态编译是将程序代码编译成一个中间文件,该文件在程序运行时动态加载所需的库函数。在动态编译的过程中,程序代码被编译成一个中间文件,而不包括库函数的代码。在程序运行时,操作系统动态加载所需的库函数,将它们链接到程序中。

2.1优点:

1.可执行文件的体积比静态编译的程序要小。
2.如果库函数发生变化,只需要重新编译库函数,而不需要重新编译整个程序。

2.2缺点:

1.程序在运行时需要依赖外部库函数,如果某个库函数无法找到或发生错误,程序就会崩溃。
2.动态编译的程序在运行时需要加载库函数,因此性能可能比静态编译的程序略低。

参考资料来源:[(8条消息) c++ 静态编译和动态编译_c++静态编译和动态编译_安牛牛牛的博客-CSDN博客]

标签:静态,程序,编译,129,动态,程序代码,库函数
From: https://www.cnblogs.com/codemagiciant/p/17601836.html

相关文章

  • 130.hello.c 程序的编译过程
    130.hello.c程序的编译过程以下是一个hello.c程序:#include<stdio.h>intmain(){printf("hello,world\n");return0;}在Unix系统上,由编译器把源文件转换为目标文件。gcc-ohellohello.c这个过程大致如下:![img](D:\BaiduSyncdisk\C++\笔记图片\130.h......
  • llvm编译命令与选项
    编译生成可执行文件clanghello.c-ohello编译生成bc文件(不可读)得到LLVM字节码文件.bc(不可读字节码文件)clang-O3-emit-llvmhello.c-c-ohello.bc-O3:表示使用编译优化级别3来编译程序-emit-llvm:表示要通过clang得到LLVM的字节码文件(.bc)或者汇编文件(.ll......
  • C语言逆向——预处理之宏定义、条件编译与文件包含
    预处理之宏定义、条件编译与文件包含预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。预处理功能主要包括宏定义、文件包含、条件编译三部分。宏定义简单的宏:#define标识符字符序列#defineFALSE0#d......
  • C语言逆向——数组和结构体,数组多维只是一个编译构造的假象,本质会转成一维数组,结构体
    数组数组是C语言中非常重要的一个概念,学习C语言主要就是两个知识点:数组、指针,学好这两个,那么你的C语言一定也会很好。什么是数组?或者说什么情况下我们需要使用数组,比如说我们需要定义一个人的年龄,我们可以定义一个变量来表示,但是如果我们需要定义三个人的年龄呢?那就需要三个变量来......
  • 当编译器没有SetProcessDpiAwareness()这个函数时...
    #include<Shlobj.h>intsetdpi(){//定义一个函数指针类型typedefHRESULT(WINAPI*SetProcessDpiAwarenessFunc)(intvalue);//加载Shcore.dllHMODULEhModule=LoadLibrary("Shcore.dll");if(hModule==NULL){//加载失败......
  • live555交叉编译
    一、下载live555源码源码下载路劲为:http://www.live555.com/liveMedia/二、交叉编译下面以aarch64-linux-gnu编译器为例说明交叉编译方法2.1不编译openssl由于live555里面默认使用到openssl,需要先编译openssl,比较麻烦,可以配置不编译进去openssl.1、复制con......
  • ubuntu20.04 的 jetson设备命令行设置静态ip
    参考:https://github.com/f1tenth/f1tenth_doc/blob/stable/getting_started/software_setup/optional_software_nx.rst查看网口设备ifconfig#查看ip地址nmclid#查看网口设备nmclicshow#展示网口设备对应的名字修改eth0的ipsudonmclicmodWired\co......
  • 编译器、链接器和解释器
    编译器编译器的作用就是将高级编程语言翻译为机器代码。编译器工作过程一般分为:词法分析:将高级语言解析成Token集合;语法分析:将Token集合构建成语法树,在这个过程可以判断出语法是否有误,比如while后面是否{等等;语义分析:判断语法树是否有明显的语义错处,比如:string不能......
  • 静态路由注入ospf
    1、ospf静态注入不允许是默认静态路由2、中间节点不会自动联通,需要路由才会联通R1:<r1>displaycurrent-configuration [V200R003C00]#sysnamer1#snmp-agentlocal-engineid800007DB03000000000000snmp-agent #clocktimezoneChina-Standard-Timeminus08:00:00......
  • java 查看class文件的jdk版本的两种方式(编译版本)
    1.情景展示有时候我们需要知道jar包里面class文件的jdk编译版本,来排查错误。以上图为例,如何实现?2.具体分析将其中一个class文件解压出来,然后查看大致的jdk版本号。3.解决方案使用解压工具打开gridreport.jar,将Report.class解压到桌面。方式一:使用文本编辑工具EditPlus......