[TOC]静态先说说我们为什么需要?当有些代码我们大量会在程序中使用比如(scanf,printf等)这些函数我们需要在程序中频繁使用,于是我们就把这些代码编译为文件,在需要使用时我们直接链接即可。定义: 程序在编译时把静态的代码链接到可执行程序中,在代码运行时不再需要静态。(简单理解就是把一堆.o文件打包到一起,当需要用到就让我们的程序链接进来)生成及使用方法: 
原创 精选 2018-04-27 19:32:18
3782阅读
2点赞
前篇中的静态有一个明显的缺点,当多个代码公用的文件为静态时,需要进行多次拷贝,造成大量重复的代码。主要需求为: 1、公用一份代码,大大节约执行文件的空间; 2、对于条件执行的代码,有可能出现代码进入可执行文件,但是却得不到运行的情况; 3、需要在启动或运行中需要用到时才实时加载进进程空间,并且
转载 2020-12-19 22:42:00
132阅读
2评论
 静态是在可执行程序运行之前就已经加入执行码中,成为执行程序的一部分来执行的。动态/共享  是在执行程序启动
原创 2022-11-02 15:33:17
118阅读
主程序编译: gcc test.c -ldl -rdynamic动态编译: gcc -shared -fPIC -nostartfiles -o mylib.so mylib.c主程序通过dlopen()加载一个.so的动态文件, 然后动态会自动运行 _init() 初始化函数, 初始化函数打印一个提示信息, 然后调用主程序的注册函数给结构体重新赋值, 然后调用结构体的函数指针,
原创 2022-09-23 13:43:25
380阅读
 Linux 类型Linux可以创建两种类型的:静态(.a): 在链接期间被应用程序直接链接进可执行文件动态链接(.so): 动态还分为两种用法: a) 应用程序运行期间链接动态,但是在编译期间声明动态的存在,也就是说这种动态必须在编译时对编译器可见,但编译器却不将此种编译进可执行文件; b) 在运行期间,动态加载和卸载的,使用动态加载方法加载。这种的形式跟动态链接没有本质
原创 2021-05-24 14:32:18
1684阅读
1. 静态动态的基本概念 静态,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态编译的程序运行时无需该文件支持,哪里都可以用,但是生成的可执行文件较大。动态,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态编译生成的程序相对较小,但运行时需要文件支持,如果机器里没有这些文件就不能运行。 2. 如何使用动态 如何程序在连接时使用了共享,就必须在运行的时候能够找到共享的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜...
转载 2013-05-11 19:45:00
276阅读
2评论
【简介】 linux环境动态一般名为libxxx.so, 用ldd命令分析某个可执行程序,可以看到该程序依赖哪些动态,以及路径。 如 ldd ./test linux-vdso.so.1 => (0x00007fffaab52000) libc.so.6 => /lib64/libc.so.
转载 2018-02-01 23:30:00
149阅读
2评论
今天学习《深入理解Java虚拟机:JVM高级特性与最佳实践》一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节。一、前期准备约定:工具默认安装目录是/usr/local/,若有源码,则源码存放在/usr/local/src/目录下,笔者用到的工具已打包上传到百度云:https://pan.baidu.com/s/1WhsQHJvduK75EBE8lQqq9g
1. 现在要生成libmydll.so的文件,头文件如下#ifndef  _MYDLL_H#define  _MYDLL_H#include "stdio.h"#ifdef WIN32    #ifdef MYDLL_EXPORTS        #define MYDLLAPI  extern "C" __declspec(dllexport)    #else
原创 2023-05-03 02:58:16
418阅读
一、基本概念1.1什么是在windows平台和linux平台下都大量存在着。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者的二进制是不兼容的。本文仅限于介绍linux。1.2的种类linux有两种:静态和共享动态)。二者的不同点在于代码被载入的时刻不同。静态
转载 精选 2013-07-03 17:10:12
947阅读
一、首先,先引入为什么要有,看下面的程序,也就是我们和一般写的程序差不多//结构树 tt ├── a.c ├── a.h ├── b.c ├── b.h ├── c.c ├── c.h └── main.c //a.h #ifndef A_H #define A_H void a(); #endi
原创 2015-05-11 11:58:28
530阅读
一、GCC编译器的常用选项 1.1 gcc基本用法     使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。     GCC最基本的用法∶gcc [参数] [文件名称] 1.2 常用的参数     -c 只编译:不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编
转载 2021-06-14 20:53:22
346阅读
Linux动态的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的。例如:#include <stdio.h> int main(int argc, char *argv[]) { printf(“hello\n”); return 0; }我们知道printf是在glibc中定义的,如果不适用动态,而是将glibc静态链接到
推荐 原创 2013-05-12 09:51:46
8411阅读
3点赞
1评论
动态链接是程序运行时加载的,当动态链接正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态,因此在 Linux动态链接也可称之为共享动态链接是目标文件的集合,目标文件在动态链接中的组织方式是按照特殊方式形成的。中函数和变量的地址使用的是相对地址(静态中使用的是绝对地 ...
转载 2021-08-23 21:32:00
1024阅读
方法一:使用dlopen打开并使用dlsym调用动态中函数 dll.c文件 #include <stdio.h> #include <dlfcn.h  int main()  {      void *libc = NULL
原创 2013-02-19 17:16:23
1991阅读
1.什么是    在windows平台和linux平台下都大量存在着。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者的二进制是不兼容的。本文仅限于介绍linux。2.的种类    linux有两种:静态和共享动态)。动态通常用.so为
linux 静态简析中简要的介绍了静态的相关东西,但在实际的工作中主要使用的是动态,下面我们就来了解下动态。什么是动态动态就是程序在运行时才会去链接的代码,多个程序共享的代码。一个与动态链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。动态的优缺点优点:1.链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多
  1.什么是 在windows平台和linux平台下都大量存在着。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者的二进制是不兼容的。 本文仅限于介绍linux。   2.的种类 linux有两种:静态和共享动态)。 二者的不同点在于代码被载入的时刻不同。
转载 精选 2010-08-25 10:59:39
618阅读
​ ​Linux静态动态的使用​ Linux下有静态链接动态链接两种,​静态链接的后缀名是.a,动态链接的后缀名是.so​,下面详细介绍: ​静态链接:​ 静态链接是指程序在编译链接的过程中就把依赖的插入到程序中,这样程序的运行就不需要这些的支持,但缺点是文件变大,下面以一个例子介绍如何制作静态链接: 有add.c和mul.c两个文件,分别实现两数相加与相乘: ​add
关于Unix静态动态的分析 基本概念 动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以...
转载 2013-01-28 19:10:00
94阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5