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

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...和ld-linux 7.可执行程序在执行的时候如何定位共享文件 当系统加载可执行代码时候,能够知道其所依赖的的名字,但是还需要知道绝对路径 此时就需要系统动态载入器(dynamic linker...—/lib/,/usr/lib目录找到文件后将其载入内存 8.在新安装一个之后如何让系统能够找到他 如果安装在/lib或者/usr/lib,那么ld默认能够找到,无需其他操作。

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

    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 创建静态 注意: 动态如果静态名字重名的时候,编译器优先使用动态....例如: ar crv libmylib.a my_print.o my_math.o 3.2 如何使用静态 [wbyq@wbyq linux_c]$ cd sum/ [wbyq@wbyq sum]$

    5.5K30

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

    linux下有两种:动态和静态(共享) 二者的不同点在于代码被载入的时刻不同。 静态的代码在编译过程中已经被载入可执行程序,因此体积比较大。...静态动态的最大区别,静态情况,把直接加载到程序中,而动态链接的时候,它只是保留接口,将动态与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。...总结: 编译静态时先使用-c选项,再利用ar工具产生.编译动态的方式依不同版本的UNXI而定。隐式调用动态与静态的用法相一致,而显示调用动态则需要借助动态加载共享库函数族。...隐式调用动态和静态使用方法一致,使用静态使用动态编译成目标程序使用的gcc命令完全一样,那当静态动态同名时,gcc命令会使用哪个文件呢?...通过测试可以发现,当静态动态同名时, gcc命令将优先使用动态.为了确保使用的是静态, 编译时可以加上 -static  选项,因此多第三方程序为了确保在没有相应动态时运行正常,喜欢在编译最后应用程序时加入

    17K21

    Linux动态链接使用

    动态链接与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接文件。程序在调用库函数时,只需要连接上这个即可。...例如下面实现一个简单的整数四则运输的动态链接,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接。...,需要在.o文件生成时加参数-fPIC gcc -c sum.c -fPIC -o sum.o gcc sum.o -o shared sum.so 一般,共享的编译命令为(曾经的实验) 动态链接...main output: sum.so => not found 这时候需要 export $LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH 注意:-fPIC是生成.o时使用...,-shared是用来生成动态链接的 以上就是本文的全部内容,希望对大家的学习有所帮助。

    4.7K10

    linux动态和静态使用_静态使用

    认识动静态Linux创建文件编写以下代码,并生成可执行程序。...在Linux,我们可以通过ldd 文件名来查看一个可执行程序所依赖的文件。...此时我们可以看到,libc-2.17.so实际上就是一个共享的目标文件,准确来说,这还是一个动态。 在Linux当中,以.so为后缀的是动态,以.a为后缀的是静态。...说明一使用动态的方法与刚才我们使用静态的方法一样,我们既可以使用 -I,-L,-l这三个选项来生成可执行程序,也可以先将头文件和文件拷贝到系统目录下,然后仅使用-l选项指明需要链接的名字来生成可执行程序...这时我们需要使用ldconfig命令将配置文件更新一,更新之后系统就可以找到该可执行程序所依赖的动态了。

    4.8K20

    Linux 如何使用nethogs

    说明: 有很多适用于Linux系统的开源网络监视工具.比如说,你可以用命令iftop来检查带宽使用情况. netstat用来查看接口统计报告,还有top监控系统当前运行进程.但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具...简单地说,可以通过nethogs查看linux进程的流量。 安装: 编译安装nethogs依赖包,centos默认rpm仓没有nethogs的包,所以需要我们手动编译。...nethogs编译依赖2个,在编译前需要安装下 #yum install libpcap libpcap-devel 2.下载nethogs最新版,这个是截止到2015年9月23日能看到的最新包 #...Nethogs: Check Network Usage by Process Using Linux Pstree to display process parent-child relationship...关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入man nethogs。

    3.2K00

    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.cache”中, 文件中保存的是已经排好序的动态链接名字列表,一般情况里面的动态链接很多,我们可以使用ldconfig -p命令来查看列表对应的动态信息...使用动态链接 在编译程序的时候,使用动态链接和静态链接是一致的, 使用“-l名”的形式,编译器在生成可执行文件的时候会链接该链接文件。...运行时的动态链接需要放到系统搜索路径。 6. 动态加载使用 动态加载动态链接不同的是, 一般的动态链接需要在程序启动的时候就要寻找动态链接,找到库函数。

    6.1K20

    的制作 与 使用Linux

    动静态的制作 前置知识 要学会制作动态,必须要有软硬链接知识的基础,大家可以移步至该文章:软链接和硬链接的详解 (Linux系统)-CSDN博客 的基本构造 问题 问题: 我们都知道代码有源文件...给编译后的文件(别人看不了你的代码实现)ψ(`∇´)ψ 也就是gcc -c 源文件名 -o 编译后的文件名.o后形成的文件,这样的文件属于二进制文件,别人看不了你的代码实现,但是计算机看得懂 如何更好的让别人使用...分为静态动态,静态以.a结尾,动态以.so结尾 的生成 静态的生成 问题: 若我们有如下文件:myprint.c,mymath.c,myprint.h,mymath.h,请问我们要干什么呢...(还没有完哦) 使用 我们直接将刚刚制作的output文件夹给用户使用就好啦~~~ 自己制作的使用有三种办法 放进系统查找库函数的路径(静态) 导入环境变量(动态) 放入...)ノ 要的是路径,不需要带上该动态文件名 (´▽`ʃ♡ƪ) 弊端 xshell退出后这个环境变量中就没有我们加的路径了,因为这是内存级环境变量,所以这种方法不适用于长期使用 法三:放入配置文件

    9110

    Linux如何安装使用puppeteer

    前提: 我需要用puppeteer实现抓取并下载百度图片中指定关键词的前100张图片, 程序在本地(Windows)可以正常运行, 但是部署到服务器(Linux)上 就总是报错:cannot find...诸如此类的报错,虽然知道是和puppeteer的安装有关, 但是一直没找到如何Linux正确的安装(Windows如果使用npm安装不成功,可以使用cnpm安装), 以下是在掘金上找到的一个方法,...亲测有效,记录一。...1、先将项目上传到Linux,然后先npm install安装项目所需依赖,会报错cannot find module 'puppeteer',接下来开始安装puppeteer 2、忽略Chromium...-%d,然后解压即可 ps: .local-chromium/linux-%d文件夹需要自己创建,同样将%d替换为具体编号 4、安装相关依赖(测试的时候不安装也正常运行了……) #依赖 yum install

    15.1K10

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

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

    3.2K20

    Linux如何使用shell操作数据

    Linux如何使用shell操作数据 作者:幽鸿   Jul 17, 2015 3:43:49 PM    我们一般在Windows采用客户端连接数据,也有直接在Linux连接数据的...但是,当我们想对数据进行自动化管理的时候,比如:想通过shell脚本来管理数据,那么该如何操作呢?本文以MySql为例,讲述两种常用的方法。     第一种方法,采用Linux管道方法。...这种方法通过Linux管道|将我们要执行的操作转入到登录后的MySql数据中。     第二种方法,直接采用mysql -e命令。...在方法一中的参数--database,其实也可以直接省掉,就像方法二中直接使用数据名wftsplat。总体来说,这两种方法都比较简单可行。

    84330

    Linux】静态动态

    一、动态和静态 具体的动态和静态的相关内容点击跳转 Linux一般分为动态和静态: 静态(.a):文件以.a为后缀,程序在编译链接的时候把的代码链接到可执行文件中。...链接的本质:无非就是我们调用库函数的时候和标准如何关联的问题 的名称:去掉前缀lib去掉后缀.so/.a剩下的就是名称,比如libc.so就是C gcc 在编译时默认使用动态链接,而生成静态链接...难道我们要把几千个.c文件全部编译成.o在加上头文件全部一个一个提供?那样太过于麻烦,为了让用户更好的使用,我们就有把所有的.o文件打成一个包,给对方提供一个文件即可!...直接把安装好的使用起来: 头文件找不到? 编译器搜索头文件时默认在当前目录下搜索,在系统默认指定路径搜索。...my_add.o my_sub.o 使用动态 但是这样子就可以

    29930

    Linux】静态动态

    制作静态 (1)朴素方法 — 不打包 下面我们实现两个简单的方法,加法和减法的计算方法,使用头文件和源文件分开的形式呈现出来,例如: 那么这一堆头文件和源文件该如何形成一个静态给别人使用呢?...使用静态 (1)朴素方法 — 直接使用 上面我们可以形成静态了,那么我们该如何使用别人的静态呢?...首先我们要知道,在 Linux ,形成的可执行程序是 ELF 格式的可执行程序,它其中包含有一张类似于符号表的东西,里面包含各种函数依赖的以及地址,符号表就是动态链接这些动态的。...可以结合下图理解: 也就是说,被加载后,要被映射到指定使用了该的进程的地址空间中的共享区部分。那么我们可以保证每次都能将动态映射到固定的地址空间?并不是的。...但是我们想做到让在共享区的任意位置,都可以正确运行呢? 下面我们先了解一,我们动态中的方法是如何编址的,其实就是以 名称+方法偏移量 来确定的。

    62110
    领券