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

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

我们可以通过ldd 可执行程序 命令,来查看该程序所用到的的具体信息 也就是说:系统把这些函数实现都被做到名为 libc.so.6 的文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径...动静态与动静态链接Linux下共分为两种,一种是动态,另一种为静态。其实我们可以通过后缀就可以区分该是否为动态。...静态静态链接 感性理解 感性理解就是将网吧里我们最喜欢的那台电脑给买回来,放在宿舍里供自己玩耍。...理性理解 静态专门让编译器对用户的程序进行静态链接,在链接时,将静态中所需要的完整代码给拷贝到自己的可执行程序内部中。...就好比将网吧里想要的那台电脑给买回宿舍,会很大的占用我们的私人空间(Linux中默认的方式为动态链接,当然我们可以用gcc/g++编译时使用-static的命令,来实现以静态链接的方式运行。)

4.8K50
您找到你想要的搜索结果了吗?
是的
没有找到

Linux从入门到入土③(GCC静态与动态链接、Git、Make、Makefile)

/test //执行可执行程序静态与动态链接不管是 Linux 还是 Windows 中的文件其本质和工作模式都是相同的,只不过在不同的平台上对应的文件格式和文件后缀不同。...系统提供的的路径/usr/lib/usr/lib64Linux⽂件名的组成:前缀(lib)+名+后缀(.a静态;.so动态)libmm.a:名为mm的静态;libnn.so:名为nn的动态...动态链接是程序运行时加载的,当动态链接正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态,因此在 Linux 中动态链接也可称之为共享。...动态链接是目标文件的集合,目标文件在动态链接中的组织方式是按照特殊方式形成的。中函数和变量的地址使用的是相对地址(静态中使用的是绝对地址),其真实地址是在应用程序加载动态时形成的。...动态是有执行权限的,而静态是没有执行权限的静态的制作与使用在 Windows 中静态一般以 lib 作为前缀,以 lib 作为后缀,中间是的名字需要自己指定,即: libxxx.lib在 Linux

1.4K10

Linux基础——gcc编译、静态与动态(共享

优点: 寻址方便,速度快 链接时被打包到可执行文件中,直接发布可执行程序即可以使用 缺点: 静态的代码被加载到可执行程序中,因此体积过大 如果静态的函数发生改变,必须重新编译可执行程序 3、静态的制作与使用.../lib 将静态文件放置lib文件夹下 nm libMyTest.a 查看中包含的函数等信息 第三步:使用静态 第一种方法: gcc + 源文件 +...-L 静态路径 + -l静态名 + -I头文件目录 + -o 可执行文件名 gcc main.c -L lib -l MyTest -I include -o app ..../app (执行失败,找不到链接,没有给动态链接器(ld-linux.so.2)指定好动态 libmytest.so 的路径) 第二种方法: gcc + 源文件 + -I头文件 + libxxx.so...+ -o 可执行文件名 gcc main.c -I include lib/libMyTest.so -o app (执行成功,已经指明了动态的路径) 如何解决第一种方法中找不到链接的问题 使用命令

7.6K40

Linux】软硬链接与动静态

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅  相关文章: 【Linux】动静态以及动静态链接Linux】基础IO_文件系统 软硬链接...(gcc -c) 将所有的.o文件使用ar -rc指令,进行打包形成静态。...第一种方式使用静态:编译时手动指定 gcc/g++编译选项 含义 -L 指定所在的路径 -I(大写i) 指定头文件所在路径 -l(小写L) 指定名称(去掉前后缀) 如下,假如我要使用这个静态,...y libstdc++-static 另外,我们需要知道以下几点: gcc/g++默认采用动态链接,但是假如只存在静态,则gcc/g++只会进行静态链接,同样,只存在动态,也只能进行动态链接(即使我们加上...而若动静态同时存在,则gcc/g++会默认进行动态链接。也可以手动指定进行静态链接(-static) end. 生活原本沉闷,但跑起来就会有风!

16530

Linux】基础IO --- 软硬链接、acm时间、动静态制作、动静态链接、动静态加载原理…

但通过ldd列出共享和file产看mymath文件的具体信息,我们又会发现许多猫腻。 gcc默认是动态链接的,但如果我们就不提供动态,只给gcc静态呢?...而且我们知道形成一个可执行程序,可能不仅仅只依赖一个,那如果链接100个,70个静态,30个动态gcc又该怎么链接呢?...Linux 命令(61)—— ldd 命令(转载自csdn博主恋喵大鲤鱼的文章) 2. 所以gcc默认的动态链接只是一个建议选项,而究竟是动态链接还是静态链接,取决于提供的是动态还是静态。...如果只提供动态,就算编译带上-static选项,gcc也只能动态链接。 如果只提供静态,那gcc也没辙,只能静态链接。...如果动静态都给gcc,那gcc遇到动态就动态链接,遇到静态就将代码进行复制,实现静态链接。 3. 而链接中只要有一个是动态gcc最后呈现的链接方式就是动态链接的。

3.6K30

Linux gcc编译生成静态和共享动态的过程

这篇文章主要通过实例演示在Linux下如何使用gcc分别编译生成静态和动态文件以及其它程序如何使用这个生成的静态和动态。...-lmyhello 注意:如果出现下面这个错误,那么是由于程序链接需要静态,系统没有安装静态导致报错: [root@typecodes howto_gen_static_lib]# gcc -o hello...-lmyhello 原因也是一样的,可执行文件hello找不到链接: 1 2 3 4 5 [root@typecodes ~]# ldd hello linux-vdso.so.1 =...-64.so.2 (0x00007f641cf53000) 3.1小节中的方法需要root用户权限,对于非root用户有方法二来解决:如前文《Linux gcc链接动态出错:LIBRARY_PATH...) [root@typecodes ~]# 解决方法三:gcc链接动态生成可执行文件时,加入rpath参数。

10710

静态链接

本文将介绍静态链接静态链接简介 静态链接实现链接操作的方式很简单,即程序文件中哪里用到了文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。...在Linux静态的一般以后缀.a结尾,在Windows下一般以.lib结尾。 静态链接创建 现在假设,我的项目拥有helloworld_c.c,helloworld_c.h两个文件。...直接在GCC参数里加上-static和相应的静态链接即可。...-static表示强制 GCC 编译器使用静态链接 即可链接libhello.a文件,生成可执行文件a.out,执行a.out效果如下所示。 可以看到成功打印了Hello World!...-L(大写的 L)选项用于向 GCC 编译器指明静态链接的存储位置; -l(小写的 L)选项用于指明所需静态链接的名称,注意这里的名称指的是 xxx 部分,且建议将 -l 和 xxx 直接连用(即

1.7K20

Linux基础IO【软硬链接与动静态

接下来学习动静态的相关内容,了解程序运行时是如何调用资源的 2.1、认识 常见的文件:stdio.h、stdlib.h、string.h 等 分为 动态静态 Linux 中,.a 后缀为静态...,只需要在 gcc/g++ 语句后面加上 -static 即可(前提是得有静态) 一般云服务默认只会存在动态静态需要单独安装 关于动静态的优缺点可以看看下面这个表格 区别 动态 静态 调用方式...静态的打包主要分为以下两步: 将源文件进行 预处理->编译->汇编,生成可链接的二进制 .o 文件 通过指令将 .o 文件打包为静态 将文件编译为 .o 二进制文件 gcc -c myadd.c.../mylib -l 待链接静态名 所需要链接静态名字,这里为 mycalc 将选项加上后重新编译 gcc -o myproc test.c -I./myinclude -L....总结 以上就是本次关于 Linux基础IO【软硬链接与动静态】的全部内容了,本文主要围绕 软硬链接 与 动静态 展开,详细说明了 软硬链接链接方法、区别及实现原理;之后还学习了 动静态 相关内容

22820

GCC -l选项:手动添加链接

这些链接一般位于 /lib/ 或 /usr/lib/,或者位于 GCC 默认搜索的其他目录。...当使用 GCC 编译和链接程序时, GCC 默认会链接 libc.a 或者 libc.so,但是对于其他的(例如非标准、第三方等),就需要手动添加。...GCC 的 -l 选项(小写的 L)可以让我们手动添加链接链接的组成是怎样呢?以数学为例,数学的文件名是 libm.a。...有三种方式可以链接GCC 搜索路径以外的链接,下面我们分别讲解。 1) 把链接作为一般的目标文件,为 GCC 指定该链接的完整路径与文件名。...参考文献 LibCRC – Open Source CRC Library in C Linux 查看当前路径 GCC -l选项:手动添加链接 Error Deflate And Inflate With

2.1K20

静态链接和动态链接的区别

1、链接概述Linux下得有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。...动态链接的加载方式有两种:隐式加载和显示加载。注意:linux下进行连接的缺省操作是首先连接动态,也就是说,如果同时存在静态和动态,不特别指定的话,将与动态相连接(见本文第四部分)。...4.3、Windows下和Linux下显示加载动态链接的比较Windows下动态链接以“.dll”为后缀,而Linux下得动态链接是以”.so”为后缀的。.../main运行的结果中很容易知道,当Linux静态Linux动态同名时, gcc命令将优先使用动态。...如果强制使用静态则需要加-static选项支持,即:gcc-static -o main main.c -L. -lmymath链接静态的可执行程序明显比链接动态的可执行文件大。

7.8K21

静态链接静态分派,动态链接

静态链接: 编译时即可确认要转换成哪个直接引用。 编译的时候由于能够确定变量的静态类型,所以编译时可知,也就是为什么叫做静态链接的原因。...唯一不同的是静态类型的变化是通过强转实现的而java中又有对应的强转字节码来获取更改之后得变量的静态类型所以编译时是可以确定变量的静态类型的,但是实际类型需要根据运行时才能够进行确定(下面动态链接详细说明...静态链接发生的阶段其实也可以分为:静态分派和解析阶段 解析阶段就是将编译期可以确定不会发生变化的符号引用转换为直接引用。...而且当找不到对应的静态类型的时候在还会默认对静态类型进行转换。 动态链接: 编译时不能确认转换成哪个引用要等到运行时才可以确认调用的是哪个方法。...所以叫做动态链接运行时才可以确定。

1.3K30

linux下制作静态和动态链接的方法

Linux静态文件的后缀为"a"。 静态的代码在编译时就已经链接到应用程序中 静态中的各个成员(.o文件)没有特殊的存在格式,仅仅是一个.o文件的集合。...lib和.a都是系统指定的静态文件的固定格式,mylib才是静态的名称, 编译时,链接器会在标准路径(/usr/lib;/lib)或者用户指定的路径下去找.a的文件。...–lmylib -static指定编译器链接静态,-L.指定静态的路径为当前路径, 在gcc编译器中引用可搜索到的目录和文件时需用(-l+名), 如在gcc中加入-lm可以在程序汇中链接标准算术...,加上-lpthread可以链接linux标准线程 总结: 使用静态可以使程序不依赖于任何其他而独立运行,但是会占用很多内存空间以及磁盘空间, 而且如果文件更新,则需重新编译源代码...–lmylib,连接器会为我们链接指定的静态以及标准C的共享

3.1K20

Linux静态链接与模板类的处理方式

在阅读本文之前,小编先给大家介绍一篇相关文章:Linux静态链接使用类模板的快速排序算法 大家首先看下以上的文章对理解下面的知识点会有很大的帮助。 当模板遇到静态链接会发生什么呢。...我们先按照常规思路去考虑一个静态链接的步骤: 1.将某些功能提取出来,放进一个cpp文件,并将接口或者对外导出的类放在头文件中 2.gcc -c编译该文件,生成.o 3.ar命令将.o文件打包成.a,...即静态链接 4.编译main函数,并将该静态链接链接,生成可执行文件。...答案是肯定的,只要我们在静态链接中申明一个type,并调用该指定type的函数,那么静态链接中就有函数原型了。 我觉得可以把该过程称为接口的“实例化”过程…….....结论:最好不要在静态链接中使用模板,同样的,动态链接也一样。 想到这里,脑子里忽然蹦出来一个想法:C++的STL到底是动态链接韩式静态链接的呢?

1.5K11

Linux】磁盘结构文件系统软硬链接静态

---- 四、静动态 1、什么是动静态 我在之前的博客中已经对动静态以及动静态链接进行了基本的介绍 – 链接方式与函数,这里就直接总结一下: 静态 (.a):程序在编译链接的时候把的代码链接...yum的资源中供别人进行下载使用了: 静态的使用 静态的使用首先需要从 yum 源或者其他地方将软件包下载下来,我们自己制作的直接 cp 然后解压即可: 然后,我们在进行 gcc 编译汇编时需要通过...默认使用动态链接,这是针对动静态都存在的情况说的,如果只存在静态,那么 Linux 也只能使用静态链接,同样,如果只存在动态,即使指明 static 选项也只会使用动态链接; 2、同时,一个可执行程序的形成可能不仅仅只依赖一个...(使用了 C 语言库函数),且Linux存在C语言动态,所以这里是使用动态链接的,我们自己的 libmymath.a 以静态的方式进行链接。...gcc,而 gcc 只工作到可执行程序形成,之后就与 gcc 无关了,但是动态是程序在运行的时候才去链接动态的代码的,而操作系统和 shell 并不知道文件的位置,所以我们还需要在程序运行时告诉操作系统动态的位置

1.2K00

链接 动态链接 静态链接

要想了解底层,链接是一个不得不过的一关,我总结了下学习的心得,首先要了解链接器到底是如何工作的,链接器分为两类,一个是静态链接,一个是动态链接,先来讲解静态链接静态链接要干两件事: 符号解析 目标文件定义和引用符号...这就是一个静态链接器如何将一个可重定位文建变成可执行目标文件从而运行到平台上。 动态链接有是怎么回事呢?...在了解之前,我们要知道静态,刚才我们所说的都仅仅是将一系列的可重定位目标文件变成一个可执行目标文件,实际上,所有的编译系统都提供了一种机制,将所有的目标模块打包成一个单独的文件,称为静态,他也可以作为静态链接器的输入...,当链接器构造一个输出文件时,它只需要拷贝静态库里被应用程序引用的目标模块。...共享也叫共享目标,以.so为结尾,像linux系统提供了dlopen这样函数去加载和链接共享。 其实.symtab这个存放符号的地方也是值得研究的,有机会再记录。

2.8K30
领券