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

共享库中库函数的选择性静态链接

共享库中库函数的选择性静态链接是指在使用共享库时,只链接所需要的库函数,而不是链接整个共享库。这种链接方式可以减少程序的体积,提高程序的运行速度,并且可以减少程序的内存占用。

在选择性静态链接时,需要使用静态链接器(如 ld)来将所需的库函数链接到程序中。这个过程通常涉及到指定要链接的库函数,以及使用静态库的路径。

在使用选择性静态链接时,需要注意以下几点:

  1. 选择性静态链接可能会导致程序的体积变小,但是也可能会导致程序的复杂度增加,因为需要手动指定所需的库函数。
  2. 选择性静态链接可能会导致程序的运行速度变慢,因为需要加载更多的代码。
  3. 选择性静态链接可能会导致程序的内存占用变小,但是也可能会导致程序的内存占用变大,因为需要加载更多的代码。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

静态链接和动态链接区别

动态而言:某个程序在运行要调用某个动态链接库函数时候,操作系统首先会查看所有正在运行程序,看在内存里是否已有此库函数拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。...在程序运行时候,被调用动态链接库函数被安置在内存某个地方,所有调用它程序将指向这个代码段。因此,这些代码必须使用相对地址,而不是绝对地址。...只需要在使用到这些公用函数源程序包含这些公用函数原型声明,然后在用gcc命令生成目标文件时指明静态名(是mymath 而不是libmymath.a ),gcc将会从静态中将公用函数连接到目标文件...既可以是静态也可以是动态常见三种符号:①在库中被调用,但没有在库定义(表明需要其他支持),用U表示②在库定义函数,用T表示③“弱态”符号,他们虽然在库中被定义但是可能被其他同名符号覆盖...2、用ldd命令可以查看一个可执行程序依赖共享

8K21

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

tcmalloc.a也可以以静态链接方式加入应用程序,大概因为使用太方便,网上关于这方面的介绍都是一笔带过,但是如果要在动态 (so)静态编译tcmalloc,却是有所不同。...于是我觉得用静态链接方式将tcmalloc编译到so中比较好,这样这个动态以比较独立方式发行,不再依赖系统是否安装了tcmalloc和libunwind。...下面是我CMakeLists.txt关于静态连接tcmalloc和libstdc++代码。...(so代码是以C++11写,所以还要依赖于libstdc++,所以我打算把libstdc++也以静态方式连接到程序) ##判断操作系统类型 if(CMAKE_SYSTEM_NAME MATCHES...总结 如果在可执行程序静态链接tcmalloc时,用默认参数编译tcmalloc就好了,无需带-fPIC参数, 但是在动态(so)静态链接tcmalloc,必须要用-fPIC重新编译tcmalloc

1.9K10

linux两种共享代码方式静态和动态

共享代码 随着软件开发发展,人们发现很多应用代码是相同,也就是说这些代码可以被共享,因此,人们提出了静态和动态两种方案来解决代码共享问题。...静态 静态,顾名思义,它是静态,也就说它不会被动态编译,它只会静态编译,节省了编译时间,提高了编译速度。同一份静态,可以被多个程序进行编译,也就实现了代码复用共享。...动态 动态,就是程序应用启动时候,动态加载,因为它一般是在系统运行时候就已经运行动态,因此其它应用可以直接使用它,并且同一个动态可以被多个应用共享使用,在系统对于一个动态只会存在一份...总结 人们为了减少冗余代码,提出了共享概念,在链接时候和程序一同打包成一个可执行文件这个就是静态,反之,在链接时候不将动态打包进可执行文件,只是标记运行需要此共享,这就是动态。...静态增大了程序体积,同时多个程序对相同静态链接也占用了大量内存,因此,才有了动态出现,可以说两者都是为了解决代码共享复用问题,而且两者是相辅相成关系。

1.1K40

库函数】Linux下动态.so和静态.a生成和使用

可以分为静态和动态两种类型: 静态 作用:在程序编译时候,将编译进可执行程序, 运行时候不需要外部函数 目录:默认目录 /lib 或 /usr/lib 或 /usr/local.../lib 后缀:libxxx.a 命名规范:静态名字一般为libxxxx.a,其中 xxxx 是该lib名称 动态 作用:在程序运行时候,将加载到程序,运行时候需要外部函数 目录...-fpic 选项用于生成与位置无关代码,这是动态链接所必需。 第二行命令: 使用 -shared 选项将目标文件链接成一个共享对象(动态) libtest.so。...3.2 静态如何使用 前面已经成功生成了一个动态链接libtest.so,下面通过一个程序来调用这个库里函数。.../test 说明静态链接成功!

1.1K10

Linux静态共享详解及实例

在Linux下分为静态共享(也叫动态),当然Windows下也有静态(.lib)和动态(.dll),这里主要是讲解Linux下静态共享,以及它们简单实现。        ...在Linux静态以.a为后缀,首先静态实现是在文件编译后链接过程中就被载入到了程序,那么后续程序运行使用就不会再依赖,那么弊端就是将静态载入到程序中会导致程序体积变大,而且如果静态后续进行了更新...而共享以.so为后缀,它实现方式是在链接过程不会将载入到程序,而是生成一个记录表,当程序运行时候再去通过记录表去链接共享,那么这个好处就是程序体积小,而且当有不同程序公用一个时候...,就只需要链接这一个就够了,并且共享后续更新依据其版本号也比较方便,但是运行程序时需要依赖共享。        ...然后通过ldconfig -v来更新系统动态链接,然后我们就可以发现soname就有动态目录了,而且在lib也生成了soname链接文件。 ?

3.3K20

cgo构建引用c静态链接

背景 项目中免不了要使用c/c++工程代码,因此使用cgo引入c静态也是不可避免(虽然官方要求尽量使用go构建你项目,而不是偷巧导入c代码,尽量保持go项目的纯粹,毕竟go和cgo是两码事)。...1 例子 github上有代码例子 1.1 windows上应用 windows下引用.lib形式静态是不可行,go build时候,会出现错误: # command-line-arguments...但是可以通过MinWG版本gcc/g++将代码编译成libxxx.a形式静态,即可完美引用,要求所生成静态名称必须以lib开头。...LDFLAGS 用来指定链接选项,比如链接位置,以及使用哪些链接。...cgo项目的本地目录,以便编译器可以正确找到链接

4.3K10

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

这篇文章主要通过实例演示在Linux下如何使用gcc分别编译生成静态和动态文件以及其它程序如何使用这个生成静态和动态。...不经常更新动态版本的话,一般会采用3.1小节做法;版本更新较频繁动态,诸如MySQL一些动态就是采用3.2小节做法。...解决方法一:使用root用户把自己生成动态共享路径添加系统动态即可。 ​...lib: 本地/第三方函数 4 总结(update 2017.04.18 12:10) 小节2讲述了静态文件生成方法,小节3讲述了动态生成方法。...1、添加路径到 /etc/ld.so.conf.d/ 目录下配置文件,然后执行命令ldconfig; 2、添加路径到 LD_LIBRARY_PATH 环境变量; 3、在编译链接命令中加入参数

47021

【Linux程序设计】之Linux库函数使用,多文件程序开发,静态共享函数

实验题目:Linux基础程序设计综合实验 实验目的:熟悉并掌握Linux库函数使用,多文件程序开发,静态共享函数制作,Makefile文件编写以及gdb调试等。...将上述“一”程序函数mysqrt和mypow制作成静态函数libmyku.a,并使用libmyku.a重新编译源程序myfirst.c。...-lfoo -L.选项指示编译器在当前目录下查找函数,-lfoo选项指示编译器使用名为libfoo.a 函数(或者名为libfoo.so共享) 三、动态共享制作 将上述“一”程序函数mysqrt...注意:使用共享编译和运行源程序时,均需考虑函数路径问题。...共享可以实现函数动态连接,类似于windows下面的.DLL 函数动态链接 gcc -shared -fpic -o libmysku.so mysqrt.c mypow.c 四、Makefile

1.1K20

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

它是多个.o文件集合。Linux静态文件后缀为"a"。 静态代码在编译时就已经链接到应用程序 静态各个成员(.o文件)没有特殊存在格式,仅仅是一个.o文件集合。...使用"ar"工具维护和管理静态 ar三个参数:r代表将文件插入归档文件,c代表建立归档文件,s代表若归档文件包含了对象模式,可利用此参数建立备存文件符号表。...lib和.a都是系统指定静态文件固定格式,mylib才是静态名称, 编译时,链接器会在标准路径(/usr/lib;/lib)或者用户指定路径下去找.a文件。...–lmylib -static指定编译器链接静态,-L.指定静态路径为当前路径, 在gcc编译器引用可搜索到目录和文件时需用(-l+名), 如在gcc中加入-lm可以在程序汇链接标准算术...–lmylib,连接器会为我们链接指定静态以及标准C共享

3.1K20

c语言里面静态链接制作和使用

商业公司通过发布.a文件和.h头文件来提供静态给客户使用;客户拿到.a和.h文件后,通过.h头文件得知库函数原型,然后在自己.c文件中直接调用这些文件,在连接时候链接器会去.a文件拿出被调用那个函数编译后...静态在用户链接自己可执行程序时就已经把调用函数代码段链接进最终可执行程序中了,这样好处是可以执行,坏处是太占地方了。...当这些应用程序同时在内存运行时,实际上在内存中有多个这个库函数代码段,这完全重复了。而动态链接本身不将库函数代码段链接入可执行程序,只是做个标记。...然后当应用程序在内存执行时,运行时环境发现它调用了一个动态库函数时,会去加载这个动态到内存,然后以后不管有多少个应用程序去调用这个函数都会跳转到第一次加载地方去执行(不会重复加载)。...从中我们可以发现使用静态链接生成可执行程序比较占用内存大小。 4.库函数使用: (1)gcc编译链接程序默认是使用动态,要想静态链接需要显式用-static来强制静态链接

1.4K30

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

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

1.5K11

Linux静态链接使用类模板快速排序算法

快速排序本质是从数组中选一个参考值ref,比该参考值,将其放在ref右边,比ref小放在左边,然后不断对两边重复执行该动作 我们先列出来快速排序步骤: 1.从数组中选一个参考值ref,比该参考值...原因是我们既然选是第一个,也就是a[p],同时表示是从数组第一个元素开始遍历。 选取j目的是,我们要时刻知道当前最近一次比ref小位置。...从上面选取最后一个值a[r],作为参考值,并且在最后,将a[r]和a[j+1]交换动作可以知道,我们总是希望知道我们选取参考值在partition过程位置,以便我们可以在最后一步,将a[refId...这里refId表示选取ref值在a[]游标。 如果我们选取ref为最后一个值,那么在所有的partition过程,这个值位置是固定。...但是,假如我们选取refrefId是p到r范围内一个随机数呢? 显然,假如我们随机选取ref值,那么在partition过程,refId对于ref就有可能和其他值交换。

1.1K41

Linux不同共享同名函数处理

场景引入: 在一个尚未成熟行业,一般行业标准是先于国家标准。这就导致了开发人员需要做很多兼容工作,再就是会用到很多其他厂商提供与头文件,面对不同版本标准,一般会更新与头文件。...那么此时如果要兼容新和旧要做怎样操作呢? ①当两个C语言共享之间有同名函数,链接时会报错么? ②如果不报错,调用顺序是如何确定呢? ③如果我想兼容两个,该如何操作呢?...创建共享静态Makefile文件编写 ################################################################# #...程序执行效果 ①链接顺序为LIB=-L../lib -lone -ltwo ? ②链接顺序为LIB=-L../lib -ltwo -lone ?...一、小结 当两个共享中有同名函数时,调用函数顺序取决于链接顺序。

2.9K10

【Android FFMPEG 开发】Android Studio 配置 FFMPEG 注意事项 ( 静态 链接 libz.so | 导入 FFMPEG 函数顺序 )

修改方法 : 在 CMakeList.txt 构建脚本 , 链接链接 z ; 在 target_link_libraries , 添加 z 链接 , 如下 : 4 ....FFMPEG 静态 : FFMPEG 使用静态编译需要增加额外配置 , 如上述 libz.so ; 因为静态在打包时就需要将所依赖都打包到静态 ; 5 ....链接函数 # 参数 1 : 本构建脚本要生成动态目标 # 参数 2 ~ ... : 后面是之前预编译动态静态 , 或引入动态 target_link_libraries...没有会报错 # FFMPEG 对于 z 依赖是以动态形式进行 # 如果 FFMPEG 是动态 , 那么可以不链接这个 , 可以运行时链接这个...# 当前 FFMPEG 是静态 , 需要在编译时将这个打包到静态 # 推荐使用静态 , 静态打包出来比动态小很多 , 一倍左右 z )

95920

【Linux】详解动静态制作和使用&&动静态在系统配置步骤

但是,当我们去编译时候,gcc编译器是不认识我们这个静态,gcc默认只能识别lib64目录下C标准,要让gcc链接我们,需要在指令中指明哪一个让gcc链接。...gcc -o myexe(要形成可执行文件名) test.c(所依赖文件) -lmyc(指明要链接myc这个静态) -L ....gcc -shared -o libmyc.so(名字,真正名要去掉lib和.so) mystdio.o mymath.o(所依赖.o文件) 但如果直接使用我们这个动态,同样会和我们之前使用静态一样发生链接错误...但是,在ubuntu系统下你会发现,动态使用静态链接方法我们动态系统还是找不到(此处特制ubuntu系统,其它系统可能可以正常运行),这时我们就只能将我们动态拷贝到系统usr/lib目录下...此时在运行我们程序就能正常运行了,但要注意是,在指令最后我们必须指明我们要链接,因为这个是我们自己导到系统,需要我们自己指明链接

31210
领券