首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux】动静态

@TOC 动静态 1....设计 分为 静态(.a)和动态(.so) 命名 以c++为例 输入 ls /lib64/libstdc++* 以lib开头要去除 真实名字为 stdc++ ---- 一般云服务器...,默认只会存在动态,不需要动态静态需要单独安装 myadd.h 实现一个加法声明 #pragma once int myadd(int d1,int d2); ---- myadd.c...,拷贝到系统默认路径下,这个行为就叫做在Linux下安装 对于任何软件而言,安装和卸载本质是拷贝到系统特定路径下 如果要安装第三方,(第一方是语言,第二方是操作系统系统接口),要正常使用,...位置 I代表 independent 忽略 C 代表 code 生成myadd.o与mysub.o目标文件,并形成与位置无关码 ---- shared选项 代表打包是一个共享/动态

2.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux】————动静态

    一.定义 什么是,在windows平台和linux平台下都大量存在着。 本质上来说库是一种可执行代码二进制形式,可以被操作系统载入内存执行。...由于windows和linux本质不同,因此二者二进制是不兼容。 本文仅限于介绍linux。 二.种类 1. 在windows中 .dll 动态 .lib 静态 2....在linux中 .so 动态 .a 静态 二者不同点在于代码被载入时刻不同。 静态代码在编译过程中已经被载入可执行程序,因此体积较大。...四.文件是如何产生linux静态后缀是.a,它产生分两步: Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元符号表 Step 2.ar命令将很多.o转换成.a,成文静态...六.如何知道一个可执行程序依赖哪些 ldd命令可以查看一个可执行程序依赖共享 七:重点 1.静态: 1.1、怎么做静态: 在Linux环境下,通常使用GCC(GNU Compiler Collection

    6010

    Linux】动静态

    hello,大家好,今天我们继续学习Linux静态,我们将从不同角度来学习如何使用,并如何制作一个可供他人使用静态文件,并试着探究一下动态加载问题。那我们就开始学习吧!!...另外对于C/C++来说其名称也是有规范要求,例如在Linux下:一般要求是lib + 真实名称 +(版本号)+ .so /.a + (版本号),版本号是可以省略不写。...那么,Linux在什么位置呢? 如上便是我们使用所要吧包含所有的头文件。 接下来,我们回答几个问题: 问:1....我们为什么可以在Linux下敲C语言代码呢?这是因为系统中有C语言所需头文件和文件。 交付:将形成归档文件和匹配头文件都传给别人。...所以OS和shell也是需要知道在哪里。在操作系统中,OS寻找相应有指定默认路径,但是我位置在默认路径里吗?这种情况下,就需要我们指明。所以我们怎么告诉操作系统在什么位置

    8810

    Linux静态和动态

    静态 一、静态 1. 静态概念 静态(.a):程序在编译链接时候把代码链接到可执行文件中。程序运行时候将不再需要静态。 2....首先我们要知道,在 Linux 下,形成可执行程序是 ELF 格式可执行程序,它其中包含有一张类似于符号表东西,里面包含各种函数依赖以及地址,符号表就是动态链接这些动态。...绝对地址比较依赖起始位置,比如说我们当前站在距离一棵树20米处,我们起始位置是0,那么绝对位置就是我们相对于起始位置距离,但是我们位置会因为起始位置变化而发生变化。...,所以未来这个在内存任意位置加载,库里面的所有函数地址都不变,所以这就叫做与位置无关码!...所以动态采用就是一种相对编址方式,然后就可以做到动态位置无关性,所以以前在 gcc 中形成动态需要加上 fPIC,形成与位置无关码。 3.

    63410

    linux动态静态

    http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520101023104745738/ Linux静态_基本概念;如何生成静态动态...1.2、 种类  linux有两种:静态和共享(动态)。...可以看到 ln 命令依赖于 libc 和 ld-linux 1.7、使用nm工具,查看静态和动态中有那些函数名; (T类表示函数是当前中定义,U类表示函数是被调用,...; -fPIC:表示编译为位置独立(地址无关)代码,不用此选项的话,编译后代码是位置相关,所以动态载入时,是通过代码拷贝方式来满足不同进程需要,而不能达到真正代码段共享目的。...在Linux下,动态静态同事存在时,gcc/g++链接程序,默认链接动态

    12.4K20

    Linux静态和动态

    Linux为什么不允许普通用户给目录建立硬链接呢? 系统层面上有.和…硬链接指向目录。...一、动态静态 具体动态静态相关内容点击跳转 Linux一般分为动态静态静态(.a):文件以.a为后缀,程序在编译链接时候把代码链接到可执行文件中。...究竟是动静态,取决你提供是动态还是静态。...---- 四、制作动态 首先我们需要把文件全部编译成.o文件,这里与静态不同,需要带上选项 -fPIC,形成与位置无关码: gcc -c -fPIC my_add.c 什么是与位置无关码目标二进制文件...,会比较浪费空间,把静态中拷贝到程序中代码区里: 动态加上fPIC形成位置无关码,采用相对编址方案,在程序链接时对应当中偏移量添加到可执行程序,运行时一旦加载进来,经过地址空间映射,把映射到地址空间之后

    30230

    Linux静态与动态

    1.什么是 在windows平台和linux平台下都大量存在着。本质上来说库是一种可执行代码二进制形式,可以被操作系统载入内存执行。...由于windows和linux本质不同,因此二者二进制是不兼容。本文仅限于介绍linux。 2.种类 linux有两种:静态和共享(动态)。...二者不同点在于代码被载入时刻不同。静态代码在编译过程中已经被载入可执行程序,因此体积较大。共享代码是在可执行程序运行时才载入内存,在编译过程中仅简单引用,因此代码体积较小。...4.文件是如何产生linux静态后缀是.a,它产生分两步 Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元符号表 Step 2.ar命令将很多.o转换成.a,成文静态...在linux下,文件一般放在/usr/lib /lib下, 静态名字一般为libxxxx.a,其中xxxx是该lib名称 动态名字一般为libxxxx.so.major.minor,xxxx

    9010

    Linux】从零开始认识动静态 - 静态

    就是在我们中! 2 动静态概述 学习了这么多知识,我们有没有使用过呢?...静态(.a):程序在编译链接时候把代码链接到可执行文件中。程序运行时候将不再需要静态 动态(.so):程序在运行时候才去链接动态代码,多个程序共享使用代码。...直白一点来讲,假如你想玩游戏,静态就是买一台电脑放在宿舍,动态就是去网吧与其他人共享。 Linux系统下基本都是使用动态: 接下来我们来详细说说静态和动态。...来看一下具体命令: 生成静态[root@localhost linux]# ar -rc libmymath.a add.o sub.o ar是gnu归档工具,rc表示(replace and create...) 查看静态目录列表[root@localhost linux]# ar -tv libmymath.a rw-r–r-- 0/0 1240 Sep 15 16:53 2017 add.o rw-r–r

    14610

    linux 动态 静态_静态库里面包含动态

    动态静态 文件系统补完 文件三个时间acm 动态静态 动态链接与静态链接 静态与动态静态对比 生成静态 打包静态 使用静态 生成动态 打包动态 使用动态 文件系统补完...动态是动态链接生成,而静态静态链接生成。...静态与动态 一般命名方式为lib+名字+.a比如C语言提供标准静态名字就是libc.a。 静态是指程序在编译链接时候把代码链接到可执行文件中。...打包动态 在这里,我们将生成动态依赖关系及方法写进自动化构建工具中: 需要注意是: 由于在内存中是可加载,它可能在内存中任意位置,也可能被映射到进程地址空间每个区域,所以为了保证当中代码执行不会出错...,也就是要保证代码是与位置无关,因此生成.o文件时需要带上-fPIC选项表示生成与位置无关码。

    7.4K20

    Linux静态与动态加载

    Linux当中,以.so为后缀是动态,以.a为后缀静态。 在Windows当中,以.dll为后缀是动态,以.lib为后缀静态。 认识了动态,那静态,又是什么呢?...注意上面我打包了两个,虽然看后缀一个静态,一个动态,但是其实上述都是静态linux不是单单通过后缀来判断一个类型,下面就来看看如何真正打包一个动态吧。...gcc -fPIC -c test2.c test3.c -fPIC作用于编译阶段,告诉编译器产生与位置无关代码,此时产生代码中没有绝对地址,全部都使用相对地址,从而代码可以被加载器加载到内存任意位置都可以正确执行...这正是共享所要求,共享被加载时,在内存位置不是固定。  ...我们只是告诉了编译器头文件和动态位置,编程成可执行程序运行后变成进程,就和编译器无关了,就变成了一个进程,进程被操作系统管理,此时操作系统还不知道头文件和动态位置

    17010

    Linux共享静态、动态详解

    1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数同共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...静态函数 静态函数实际上就是简单一个普通目标文件集合,一般来说习惯用“.a”作为文件后缀。可以用ar这个程序来产生静态函数文件。Ar是archiver缩写。...静态函数对开发者来说还是很有用,例如你想把自己提供函数给别人使用,但是又想对函数源代码进行保密,你就可以给别人提供一个静态函数文件。...在用ar命令创建静态库函数时候,还有其他一些可以选择参数,可以参加ar使用帮助。这里不再赘述。 一旦你创建了一个静态函数,你可以使用它了。...文件系统中函数文件位置 共享函数文件必须放在一些特定目录里,这样通过系统环境变量设置,应用程序才能正确使用这些函数

    8.9K11

    Linux】动态静态底层比较

    1 前言 我们前两篇文章讲解了如何建立动静态与如何使用动静态。 接下来我们就来深入聊聊动静态。...将我们程序进行静态链接,这就要求我们链接任何都要通过对应静态版本!!! 一般我们操作系统都是动态 并且在对.o文件打包时候: 静态使用ar -rc 文件名......动态使用gcc -shared,前提是.o文件里进行-fPIC位置无关码设置gcc -fPIC -c 文件名 使用方法: 静态: 安装到操作系统中,.h 文件放入/user/include...静态很简单,不需要考虑这么多,因为在编译期间就把静态内容拷贝到了可执行文件当中。就不必谈论找到静态这一说了。动态就不一样,需要在运行过程中寻找与加载!...所以只有了偏移量与初始地址,无论加载到哪里都可以成功寻找到该函数 -> 也就验证了位置无关码!所以形成.o文件时候就要加上-fPIC!!!

    22010

    Linux:理解动静态

    我们得从以下两个角度来理解: (1)站在库制作者角度——>尝试自己写一个简单 (2)站在库使用者角度——>学会如何使用第三方 二、静态链接 静态 ——libXXX.a   2.1 静态原理和命令...5、以前我们写代码是动态,只不过无论是在windows还是linux,写C、C++相关头文件和,编译器和系统都可以找到,所以你才能实现无障碍编程,所以你想让第三方也实现无障碍编程,关键在于如何如何让编译器和系统找到这个...(也就是说缺页中断时候必须把它加载到固定地址处) ——>可是我可能有十个八个,我怎么保证每个都恰好被加载到内存中固定位置呢?...我怎么保证哪个先加载呢???因为这个位置可是在编译时候就硬编码了啊,所以这是不可能做到!...——>所以我们就要想办法让在虚拟内存任意位置都可以加载 ——>解决方法就是采用相对编址方式,意思就是你可以随便加载,你要你在你秒速结构体里面把加载进去起始地址给我,然后我就会用起始地址+偏移量方法找到我想要调用库函数

    10010

    Linux】动静态以及动静态链接

    静态与动静态链接 在Linux下共分为两种,一种是动态,另一种为静态。其实我们可以通过后缀就可以区分该是否为动态。...理性理解 动态专门让编译器对用户程序进行动态链接,在动态链接时,只需要拷贝动态中所需要函数代码地址到自己可执行程序中对性相关位置即可。...动态链接优缺点 缺点 我们程序比较依赖动态,当动态缺失时,程序便无法运行!就好比当网吧被查封后,学校里同学就算知道网吧位置,知道自己想要座位位置也没用!因为网吧已经缺失了!...静态静态链接 感性理解 感性理解就是将网吧里我们最喜欢那台电脑给买回来,放在宿舍里供自己玩耍。...理性理解 静态专门让编译器对用户程序进行静态链接,在链接时,将静态中所需要完整代码给拷贝到自己可执行程序内部中。

    4.9K50

    Linux之动态静态

    前言 一、动态静态概念 在之前文章中,介绍过动静态概念,因此这次我们只是简单回顾一下。 Linux分为动态静态。...四、制作动态 首先我们将文件全部编译成.o文件,这里与制作静态不同是,需带上-fPIC,形成位置无关码: gcc -c -fPIC add.c 什么是位置无关码?...有位置无关码目标二进制文件有什么特殊? 静态采用是绝对编址; 动态采用是相对编址。即,指定函数地址采用相对编址(偏移地址 + 段起始地址)。...把静态代码拷贝到内存中代码区: 动态通过fPIC形成位置无关码,采用相对编址方式,在程序链接时将对应偏移量添加到程序中,库函数在程序运行时加载进来,经过页表,把映射到虚拟地址空间后...总结 以上就是今天要讲内容,本文介绍了Linux静态相关概念。

    52220

    Linux下动态(.so)和静态(.a) 区别

    linux下有两种:动态静态(共享) 二者不同点在于代码被载入时刻不同。 静态代码在编译过程中已经被载入可执行程序,因此体积比较大。...静态和动态最大区别,静态情况下,把直接加载到程序中,而动态链接时候,它只是保留接口,将动态与程序代码独立,这样就可以提高代码可复用度,和降低程序耦合度。...相当于一个可执行文件 -fPIC:表示编译为位置独立代码,不用此选项的话编译后代码是位置相关所以动态载入时是通过代码拷贝方式来满足不同进程需要,而不能达到真正代码段共享目的。 -L....当需要载入动态代码时,UNIX会按照某种路径查找动态 通知UNIX系统动态正确位置有如下两种方法., 1)带编译路径 #g++ -o dOut main.cpp ....隐式调用动态静态使用方法一致,使用静态和使用动态编译成目标程序使用gcc命令完全一样,那当静态和动态同名时,gcc命令会使用哪个文件呢?

    17.1K21

    Linux静态、动态创建与调用

    一、前言 在项目开发时,经常会用到第三方,也会自己创建动态给别人或者给自己其他工程项目使用。 类型分为动态静态。 在Linux下动态后缀为.so,静态后缀为.lib。...动态称为共享. 程序在编译时需要、运行时候也需。 静态在编译时候抽取需要使用函数进行编译、运行时候不需要静态编译程序比动态链接占用空间更加大。.../a.out 三、静态创建与使用 3.1 创建静态 注意: 动态如果静态名字重名时候,编译器优先使用动态....静态命名规则: libxxx.a 创建静态流程: 先将.c源文件编译成.o文件 gcc xxx.c xxx.c xxx.c ......例如: ar crv libmylib.a my_print.o my_math.o 3.2 如何使用静态 [wbyq@wbyq linux_c]$ cd sum/ [wbyq@wbyq sum]$

    5.5K30

    Linux静态和共享详解及实例

    Linux下分为静态和共享(也叫动态),当然Windows下也有静态(.lib)和动态(.dll),这里主要是讲解Linux静态和共享,以及它们简单实现。        ...在Linux静态以.a为后缀,首先静态实现是在文件编译后链接过程中就被载入到了程序中,那么后续程序运行使用就不会再依赖,那么弊端就是将静态载入到程序中会导致程序体积变大,而且如果静态后续进行了更新...首先我们先将这些函数文件编译为.o文件,需要加上-fPIC参数,表示让生成.o文件与路径无关,这一点主要是用于共享操作,单纯只用静态的话可以不加。 ?...静态        对于静态创建用ar命令:ar  rcs  静态名.a  *.o,然后我们就得到了一个.a静态,然后我将其放到了lib文件夹下。 ?        ...那么生成文件是路径无关,那么不管被加载到内存任何位置,程序都可以正确执行。 ?

    3.4K21
    领券