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

Linux静态动态创建与调用

一、前言 在项目开发时,经常会用到第三方,也会自己创建动态给别人或者给自己其他工程项目使用。 类型分为动态、静态。 在Linux动态后缀为.so,静态后缀为.lib。...动态称为共享. 程序在编译时需要、运行时候也需。 静态在编译时候抽取需要使用函数进行编译、运行时候不需要。 静态编译程序比动态链接占用空间更加大。...二、动态创建与使用案例 2.1 创建动态 创建动态语法格式: gcc -fPIC -shared -o .so 源文件名称.c 如何命名?...说明: 默认情况系统搜索动态路径是/lib 、 /usr/lib 方法1: 直接将动态拷贝到/lib 或者 /usr/lib 目录下。 [wbyq@wbyq linux_c]$ ..../a.out 三、静态创建与使用 3.1 创建静态 注意: 动态如果静态名字重名时候,编译器优先使用动态.

5.4K30

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

linux下有两种:动态和静态(共享) 二者不同点在于代码被载入时刻不同。 静态代码在编译过程中已经被载入可执行程序,因此体积比较大。...动态(共享)代码在可执行程序运行时才载入内存,在编译过程中仅简单引用,因此代码体积比较小。 不同应用程序如果调用相同,那么在内存中只需要有一份该动态(共享)实例。...静态动态最大区别,静态情况,把直接加载到程序中,而动态链接时候,它只是保留接口,将动态与程序代码独立,这样就可以提高代码可复用度,和降低程序耦合度。...所依赖动态查找路径环境变量名称各不相同 UNIX版本              动态查找路径环境变量 AIX                 LIB_PATH LINUX          ...当动态被接口完全相同文件取代后,可执行程序能迅速切换到新动态中代码,省去了编译麻烦。

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

linux制作静态动态链接方法

编译 gcc main.c -l xxx [-L 路径] (如果不加-L则在标准路径查找) 运行 ./a.out 基本概念: 静态又称为文档文件(Archive File)。...它是多个.o文件集合。Linux中静态文件后缀为"a"。 静态代码在编译时就已经链接到应用程序中 静态各个成员(.o文件)没有特殊存在格式,仅仅是一个.o文件集合。...,加上-lpthread可以链接到linux标准线程 总结: 使用静态可以使程序不依赖于任何其他而独立运行,但是会占用很多内存空间以及磁盘空间, 而且如果文件更新,则需重新编译源代码.../a.out 如果不指定则在标准路径找 当你发布要标准路径“/usr/lib 或 /lib”就不需要其它操作,但 gcc 时一定要加“-l”指定名 永久修改运行时查找路径...:表示要连接在当前目录中 -ltest:编译器查找动态连接时有隐含命名规则,即在给出名字前面加上lib,后面加上.so来确定名称 LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态路径

3.1K20

linux 动态加载_linux默认动态加载路径

当我们在linux系统引用动态时,经常会遇到一个问题,加入我们需要动态没有在系统默认目录下,我们编译时使用-L指定了动态路径,编译时没有问题,但是执行调用该动态可执行文件时,却提示找不到动态...假设我们使用tensorflow,把需要调用libtensorflow.so和libtensorflow_framework.so两个动态放在我们和我们程序同一级目录下。...,使用ldd命令查看一: 为什么我们编译时候明明指定了动态路径,而且程序编译时候没有问题,执行时候却找不到了呢?...1、因为我们在编译时候使用-L指定动态路径,只是告诉编译器我们所需要动态在某个目录下,只对编译起作用 2、当程序执行时,程序还是回去系统默认路径寻找程序运行所需动态 所以在程序运行时候会出现找不到动态问题...解决办法,使用-Wl,-rpath 所需动态路径 告诉程序如果在默认路径找不到所需动态,则去当前指定路径动态

11.7K20

Linux 编译动态_makefile编译动态

“libstr.so”; “-o libstr.so” 表示生成名字为“libstr.so.1”实际动态链接文件; 2.3 动态链接安装 生成动态链接后,一个很重要操作是安装,一般情况,...将 动态链接放到这三个中任意个目录都可以。 3. 动态链接配置文件 一般情况动态链接不能随意使用。...系统中配置文件/etc/ld.so.conf便是动态链接搜索路径配置文件。在这个文件内存放着可以被Linux共享动态链接所在目录名字(系统默认/lib, /usr/lib除外)。...搜索完毕后将结果写入到缓存文件“/etc/ld.so.cache”中, 文件中保存是已经排好序动态链接名字列表,一般情况里面的动态链接很多,我们可以使用ldconfig -p命令来查看列表对应动态信息...运行时动态链接需要放到系统搜索路径。 6. 动态加载使用 动态加载动态链接不同是, 一般动态链接需要在程序启动时候就要寻找动态链接,找到库函数。

6K20

linux编译curl动态so

转载请注明出处:帘卷西风专栏(http://blog.csdn.net/ljxfblog)  curl是一个很强大http开源,c++里面能够很方便和http服务器交互。...在windows还是很容易使用,如何使用案例比比皆是,而且很容易就找到已经编译好动态进行测试,但是最后在linux下部署时候,发现不好找已经编译好so文件,最后没办法只好自理更生。...下载了源码下来看,配置文件看得一塌糊涂,在网上查了一些资料,也很少找到有用信息,最后结合自己理解和网上资料,总算把curl编译成功了,再此记录一,方便以后查阅,也希望能帮助到其它遇到此问题朋友们...我是使用腾讯SDK里面附带curl源码(ps,腾讯SDK示例代码貌似没在linux测试过,我编译后使用他们代码,发现很容易崩溃,需要修改才能运行,但是windows正常)。...包含了编译生产、头文件等。 然后为了能够方便移植我们程序,把include/lib下面的头文件和so文件拷贝到自己工程目录就能使用curl了。

6.3K10

Linux】静态动态

Linux为什么不允许普通用户给目录建立硬链接呢? 系统层面上有.和…硬链接指向目录。...一、动态和静态 具体动态和静态相关内容点击跳转 Linux一般分为动态和静态: 静态(.a):文件以.a为后缀,程序在编译链接时候把代码链接到可执行文件中。...上面说了那么多,总结一: -I:指明头文件搜索路径 -L:指明文件搜索路径 -l:指明要链接哪个,带上名称(去掉前缀和后缀) gcc默认是动态链接(建议行为)对于特定一个,...答案是无关,接下来运行是和OS有关动态是运行时才加载,所以程序运行起来,OS和shell也是需要知道是在哪里!而我们自己制作并没有在系统路径,OS无法找到!...把对应动态建立在系统目录下: 总结一: 运行动态 1、拷贝.so文件到系统共享路径, 一般指/usr/lib 2、更改 LD_LIBRARY_PATH 3、ldconfig 配置

26330

Linux】静态动态

制作动态 首先我们需要介绍一生成动态使用指令是 gcc,带上 -shared 选项即可。另外在生成 .o 文件时候,需要带上 -fPIC 选项,意思是产生位置无关码,这个我们后面再解释。...那么接下来就和系统有关系了,所以当我们加载运行时候,我们也要告诉系统动态在哪里! 我们可以使用 ldd 观察一: 我们发现我们动态是找不到。...如下: ln -s mylib/lib/libmylib.so libmylib.so 我们发现,当前路径软链接是可以被找到,那么就说明,动态链接默认会在当前路径搜索文件!...首先我们要知道,在 Linux ,形成可执行程序是 ELF 格式可执行程序,它其中包含有一张类似于符号表东西,里面包含各种函数依赖以及地址,符号表就是动态链接这些动态。...但是我们想做到让在共享区任意位置,都可以正确运行呢? 下面我们先了解一,我们动态方法是如何编址,其实就是以 名称+方法偏移量 来确定

33510

Linux动态与静态底层比较

2 编译使用比较 那么 gcc编译时候是怎么进行: gcc不加-static选项默认使用动态,没有提供动态就只能使用静态 gcc加-static选项就使用静态 那么-static意义是什么呢....bashrc 增添配置文件 预测一,如果我们使用别人,别人应该给我们提供什么?...但是对应方法并没有在可执行程序中,所以动态是怎样被调用呢?又是什么时候被调用呢? 动态也会写入到内存中,并通过页表映射到地址空间中共享区。让调用时候通过共享区来找到对应方法实现。...总结一: 进程创建阶段,初始化地址空间,让CPU知道main函数入口地址 加载 -> 每一行代码与数据就都有了物理地址,自己虚拟地址自己也就知道了,就可以构建映射了 接下来我们就来看看动态是如何加载...所以同样,与加载可执行程序类似,会把动态读入内存中,并建立对应页表映射,**动态虚拟地址在进程地址空间里是在共享区里

17910

Linux动态链接使用

动态链接与普通程序相比而言,没有main函数,是一系列函数实现。通过shared和fPIC编译参数生产so动态链接文件。程序在调用库函数时,只需要连接上这个即可。...例如下面实现一个简单整数四则运输动态链接,定义caculate.h和caculate.c两个文件,生产libcac.so动态链接。...readelf -a smu.o 将二进制文件转换为汇编 objdump -d sum.o 动态链接生成 sum.c #include #include <stdlib.h...,需要在.o文件生成时加参数-fPIC gcc -c sum.c -fPIC -o sum.o gcc sum.o -o shared sum.so 一般,共享编译命令为(曾经实验) 动态链接...sum.so => not found 这时候需要 export $LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH 注意:-fPIC是生成.o时使用,-shared是用来生成动态链接

4.7K10

Linux共享、静态动态详解

介绍 使用GNU工具我们如何在Linux创建自己程序函数?...1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数同共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...某些情况,使用gcc 来生成object文件,需要使用“-Wl,-export-dynamic”这个选项参数。 通常,动态函数符号表里面包含了这些动态对象符号。...Linux系统,DL函数与其他函数在格式上没有特殊区别,我们前面提到过,它们创建时候是标准object格式。...在某些情况,调用gcc来创建对象文件也需要包含“-Wl,-export-dynamic”选项。通常,动态符号表仅包含动态对象使用符号。

8.8K10

浅谈Linux动态链接

不同操作系统动态链接文件格式稍有不同,Linux称之为共享目标文件(Shared Object),文件后缀为.so,Windows动态链接(Dynamic Link Library)文件后缀为....ldd命令查看动态链接依赖 在Linux上,动态链接有默认部署位置,很多重要放在了系统/lib和/usr/lib两个路径。...一些常用Linux命令非常依赖/lib和/usr/lib64面的各个,比如:scp、rm、cp、mv等Linux常用命令非常依赖/lib和/usr/lib64各个。...如果某个Linux程序报错提示缺少某个,可以用ldd命令可以用来检查这个程序依赖了哪些,是否能在磁盘某个路径找到.so文件。...动态链接查找过程 刚才提到,Linux动态链接绝大多数都在/lib和/usr/lib,操作系统也会默认去这两个路径搜索动态链接

8.8K30

Linux动态和静态

前言 一、动态和静态概念 在之前文章中,介绍过动静态概念,因此这次我们只是简单回顾一Linux分为动态和静态。...,也就是说,一定要告知是哪一个路径哪一个,即使该路径只有一个也要明确告知gcc是哪一个(我们以前写代码时候,从未指明名称,是因为gcc/g++默认帮我们填写了,因为它们可以识别C/C+...安装 将安装到系统头文件。...总结 以上就是今天要讲内容,本文介绍了Linux动静态相关概念。...本文作者目前也是正在学习Linux相关知识,如果文章中内容有错误或者不严谨部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

38620

Linux静态动态加载

查看文件链接标准:ldd 这就是链接c标准,我们查一这个文件libc.so.6: 没错,libc.so.6是一个软链接文件,我们再来查看一这个目标文件文件类型,使用file命令:  可以发现它是一个共享...在Linux当中,以.so为后缀动态,以.a为后缀是静态。 在Windows当中,以.dll为后缀动态,以.lib为后缀是静态。 认识了动态,那静态,又是什么呢?...注意上面我打包了两个,虽然看后缀一个静态,一个动态,但是其实上述都是静态linux不是单单通过后缀来判断一个类型,下面就来看看如何真正打包一个动态吧。.../etc/ld.so.conf.d/路径找所有配置文件里面的路径,之后就会在每个路径查找你所需要。...命令更新一配置文件: ldconfig  最终可运行a.out,经过我实测,unbuntu貌似无法使用该方法,不过unbuntu还有别的方法 unbuntu: 在/etc/ld.so.conf后面直接追加新第三方动态路径

12610
领券