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

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

静态与动静态链接Linux下共分为两种,一种是动态,另一种为静态。其实我们可以通过后缀就可以区分该是否为动态。...动态的命名一般为xxxlibx(这里的x是指语言).so,静态一般为:xxxlibx.a 动态与动态链接 感性理解 网吧(动态/共享) 我们可以将动态看作是学校附近的一个网吧,网吧里有很多的电脑...静态静态链接 感性理解 感性理解就是将网吧里我们最喜欢的那台电脑给买回来,放在宿舍里供自己玩耍。...理性理解 静态专门让编译器对用户的程序进行静态链接,在链接时,将静态中所需要的完整代码给拷贝到自己的可执行程序内部中。...就好比将网吧里想要的那台电脑给买回宿舍,会很大的占用我们的私人空间(Linux中默认的方式为动态链接,当然我们可以用gcc/g++编译时使用-static的命令,来实现以静态链接的方式运行。)

4.8K50

Linux】软硬链接与动静态

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅  相关文章: 【Linux】动静态以及动静态链接Linux】基础IO_文件系统 软硬链接...动态的打包 上面讲了静态的打包和使用,接下来将动态的打包和使用,以及动态链接的原理。...动静态链接的原理 为什么静态链接生成的可执行程序,不会依赖文件呢?...y libstdc++-static 另外,我们需要知道以下几点: gcc/g++默认采用动态链接,但是假如只存在静态,则gcc/g++只会进行静态链接,同样,只存在动态,也只能进行动态链接(即使我们加上...而若动静态同时存在,则gcc/g++会默认进行动态链接。也可以手动指定进行静态链接(-static) end. 生活原本沉闷,但跑起来就会有风!

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

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

    从下面可以看到,Linux不允许普通用户给目录建立硬链接,但Linux自己可以给目录建立硬链接(隐藏文件),只许州官放火,不许百姓点灯。 linux为什么不能硬链接目录?...三、动静态的区别(链接阶段,链接结果,链接方式上的区别) 1. 静态以.a为后缀,程序在编译链接阶段,将的代码链接到可执行文件当中。...而且我们知道形成一个可执行程序,可能不仅仅只依赖一个,那如果链接100个,70个静态,30个动态,gcc又该怎么链接呢?...Linux 命令(61)—— ldd 命令(转载自csdn博主恋喵大鲤鱼的文章) 2. 所以gcc默认的动态链接只是一个建议选项,而究竟是动态链接还是静态链接,取决于提供的是动态还是静态。...如果动静态都给gcc,那gcc遇到动态就动态链接,遇到静态就将代码进行复制,实现静态链接。 3. 而链接中只要有一个是动态,gcc最后呈现的链接方式就是动态链接的。

    3.6K30

    静态链接

    文件用于程序的链接阶段,但编译器提供有 2 种实现链接的方式,分别是静态链接方式和动态链接方式,其中采用静态链接方式实现链接操作的文件,称为静态链接;采用动态链接方式实现链接操作的文件,称为动态链接...本文将介绍静态链接静态链接简介 静态链接实现链接操作的方式很简单,即程序文件中哪里用到了文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。...在Linux静态的一般以后缀.a结尾,在Windows下一般以.lib结尾。 静态链接创建 现在假设,我的项目拥有helloworld_c.c,helloworld_c.h两个文件。...需要遵循规则libxxx.a 静态链接使用 下面使用该静态链接,在main.c文件中包含helloworld_c.h文件,即可使用Print_HelloWorld()函数。...直接在GCC参数里加上-static和相应的静态链接即可。

    1.7K20

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

    接下来学习动静态的相关内容,了解程序运行时是如何调用资源的 2.1、认识 常见的文件:stdio.h、stdlib.h、string.h 等 分为 动态静态 Linux 中,.a 后缀为静态...安装开发环境 实际上是在安装编译器、开发语言配套的和头文件 编译器的 语法提示功能来源于头文件(语法提示其实就是搜索) 我们在写代码时,开发环境是怎么知道语法错误或其他错误的?...如果只有静态,但又不指定静态链接,会发生什么?...可以看看以上三种方式生成的可执行程序大小: 静态链接生成的程序比动态链接大得多,并且内含静态的动态链接程序,也比纯粹的动态链接程序大,说明程序不是 非静即动,可以同时使用动态静态 ----...总结 以上就是本次关于 Linux基础IO【软硬链接与动静态】的全部内容了,本文主要围绕 软硬链接 与 动静态 展开,详细说明了 软硬链接链接方法、区别及实现原理;之后还学习了 动静态 相关内容

    28720

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

    1、链接概述Linux下得有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。...动态链接的加载方式有两种:隐式加载和显示加载。注意:linux下进行连接的缺省操作是首先连接动态,也就是说,如果同时存在静态和动态,不特别指定的话,将与动态相连接(见本文第四部分)。...4、动态链接(显式链接)4.1、重要的dlfcn.h头文件LINUX下使用动态链接,源程序需要包含dlfcn.h头文件,此文件定义了调用动态链接的函数的原型。下面详细说明一下这些函数。...4.3、Windows下和Linux下显示加载动态链接的比较Windows下动态链接以“.dll”为后缀,而Linux下得动态链接是以”.so”为后缀的。.../main运行的结果中很容易知道,当Linux静态Linux动态同名时, gcc命令将优先使用动态

    8.2K21

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

    静态链接: 编译时即可确认要转换成哪个直接引用。 编译的时候由于能够确定变量的静态类型,所以编译时可知,也就是为什么叫做静态链接的原因。...接下来解释下为什么能够确定变量的静态类型并且是怎么确定的。 首先明确一个点:静态类型和实际类型都是可以改变的。...唯一不同的是静态类型的变化是通过强转实现的而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】磁盘结构文件系统软硬链接静态

    ---- 四、静动态 1、什么是动静态 我在之前的博客中已经对动静态以及动静态链接进行了基本的介绍 – 链接方式与函数,这里就直接总结一下: 静态 (.a):程序在编译链接的时候把的代码链接...静态的制作 制作静态就是将多个 .o 文件打包到一个文件中,所以我们可以使用 Linux 中的归档工具 ar (rc : replace and create): 注:我们最好将生成 .o 文件以及归档...默认使用动态链接,这是针对动静态都存在的情况说的,如果只存在静态,那么 Linux 也只能使用静态链接,同样,如果只存在动态,即使指明 static 选项也只会使用动态链接; 2、同时,一个可执行程序的形成可能不仅仅只依赖一个...(使用了 C 语言库函数),且Linux存在C语言动态,所以这里是使用动态链接的,我们自己的 libmymath.a 以静态的方式进行链接。...而静态链接是在多个可重定向文件进行链接时直接将静态中的代码拷贝到代码段中,最终形成可执行程序;那么后面程序运行时将对应数据加载到虚拟内存的对应区域、建立页表映射、执行代码等系列过程与静态就完全无关了

    1.2K00

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

    在阅读本文之前,小编先给大家介绍一篇相关文章:Linux静态链接使用类模板的快速排序算法 大家首先看下以上的文章对理解下面的知识点会有很大的帮助。 当模板遇到静态链接会发生什么呢。...即静态链接 4.编译main函数,并将该静态链接链接,生成可执行文件。...接下来,只需要将静态链接编入main函数,就算完成了 ?...答案是肯定的,只要我们在静态链接中申明一个type,并调用该指定type的函数,那么静态链接中就有函数原型了。 我觉得可以把该过程称为接口的“实例化”过程…….....结论:最好不要在静态链接中使用模板,同样的,动态链接也一样。 想到这里,脑子里忽然蹦出来一个想法:C++的STL到底是动态链接韩式静态链接的呢?

    1.5K11

    链接 动态链接 静态链接

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

    2.9K30

    cmake:动态链接(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++

    tcmalloc.a也可以以静态链接的方式加入应用程序中,大概因为使用太方便,网上关于这方面的介绍都是一笔带过,但是如果要在动态 (so)中静态编译tcmalloc,却是有所不同的。...使用这种方案,我的so代码不需要在编译时链接tcmalloc,什么都不用改变,就能使用tcmalloc。...于是我觉得用静态链接方式将tcmalloc编译到so中比较好,这样这个动态以比较独立的方式发行,不再依赖系统中是否安装了tcmalloc和libunwind。...” target_link_libraries(cmimpl -pthread ) #######静态链接c++################### SET_TARGET_PROPERTIES...总结 如果在可执行程序中静态链接tcmalloc时,用默认参数编译tcmalloc就好了,无需带-fPIC参数, 但是在动态(so)中静态链接tcmalloc,必须要用-fPIC重新编译tcmalloc

    1.9K10

    C语言 | 什么是静态链接和动态链接

    今天分享的是静态链接和动态链接的相关知识,并且自己动手写一个简单的静态函数和动态函数,来体验这个流程。 首先要从函数的发明开始说起。...这时候的解决方案就是以(主要有2种:静态和动态)的形式来提供。 比较早出现的是静态链接。...gcc中编译链接程序默认是使用动态的,要想静态链接需要显式用 -static 来强制静态链接。 上面讲的都是链接的背景知识,接下来自己制作一个简单的链接并且使用。...编译完之后可以得到一个.so文件,这个文件就是动态链接文件。做的人给用的人发布时,发布libxxx.so和xxx.h即可。 对于动态链接,该怎么使用呢?...这就是动态和静态的一个区别,静态在编译完没问题之后就可以直接运行,因为他生成的可执行文件是完整的,但是动态不行,他必须要去固定的目录(其实就是环境变量)加载内容到内存中。 该怎么解决呢?

    4.3K40

    Linux】动静态

    @TOC 动静态 1....设计 分为 静态(.a)和动态(.so) 的命名 以c++的为例 输入 ls /lib64/libstdc++* 以lib开头要去除 的真实名字为 stdc++ ---- 一般云服务器...,默认只会存在动态,不需要动态静态需要单独安装 myadd.h 实现一个加法的声明 #pragma once int myadd(int d1,int d2); ---- myadd.c...+标准的,所以被认为是第三方 ---- 告诉它需要链接mymath,就可以正常运行了,而不需要告诉头文件 将下载下来的和头文件,拷贝到系统默认路径下,这个行为就叫做在Linux下安装 对于任何软件而言...---- 此时软链接指向这个 ---- 查看第三方时,libmymath.so有自己的第三方 ---- 软链接是一个文件,所以即便关闭xshell,再次打开也能正常运行mytest 可执行程序

    2.4K30

    Linux】动静态

    hello,大家好,今天我们继续学习Linux中的动静态,我们将从不同的角度来学习如何使用,并如何制作一个可供他人使用的动静态文件,并试着探究一下动态加载问题。那我们就开始学习吧!!...4、链接:连接目标代码,生成可执行程序。在链接之前,各个头文件都是独立进行编译的。各个头文件编译的过程互不干扰。 三.实现动静态 静态(.a):程序在编译链接的时候把的代码链接到可执行文件中。...-l:链接动态,只要名即可(去掉lib以及版本号)· -L:链接所在的路径 -I(大写):指明头文件的路径。 运行完成。 我们生成的明明是静态,这里怎么是动态链接呢?...由于默认使用的是动态链接,这就意味着:当依赖的中有一个是动态链接,整体就是动态链接的。静态链接静态的方式吧代码拷贝过来,但最终整体是动态链接。...方案三 在与可执行程序同一路径下,建立软链接 四.动静态的加载问题 4.1静态的加载问题 静态需要加载吗?不需要,静态一般不考虑程序加载过程。

    8210
    领券