当前位置:首页 » 操作系统 » linux静态链接

linux静态链接

发布时间: 2022-07-12 10:30:19

❶ 在linux下,如何强制让GCC静态链接

  • 编译命令行中,将使用的静态库文件放在源文件后面就可以了。比如:gcc-L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop 其中-L/usr/lib指定库文件的查找路径,编译器默认在当前目录下先查找指定的库文件。

❷ linux下的动态链接库和静态链接库到底是个什么鬼

Linux中动态链接库是.so为后缀的文件,静态链接库是.a为后缀的文件,.a和.so文件都叫做函数库文件。库是一组预先编译好的函数的集合,库文件的名字以lib开头,随后的部分指明这是什么库(例如libc代表c语言库,libm.a的m代表数学库)。
.a静态函数库:当同时运行多个程序并且都使用到同一个函数库的函数时,内存中就会有同一函数的多份副本,会消耗大量宝贵的内存。
.so共享函数库:可以克服.a函数库的不足。当一个程序使用共享函数库时,程序本身不再包含函数代码,而只是引用共享代码,当实际调用时,共享库才被加载到内存中。
.a文件类似于Windows下的.lib文件,.so文件类似于Windows下面的.dll文件,这样就好理解了。

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

两者区别:a,静态库的使用需要:1包含一个对应的头文件告知编译器lib文件里面的具体内容2设置lib文件允许编译器去查找已经编译好的二进制代码b,动态库的使用:程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库c,依赖性:静态链接表示静态性,在编译链接之后,lib库中需要的资源已经在可执行程序中了,也就是静态存在,没有依赖性了动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供需要的动态库,有依赖性,运行时候没有找到库就不能运行了d,区别:简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。做成静态库可执行文件本身比较大,但不必附带动态库做成动态库可执行文件本身比较小,但需要附带动态库链接静态库,编译的可执行文件比较大,当然可以用strip命令精简一下(如:striplibtest.a),但还是要比链接动态库的可执行文件大。程序运行时间速度稍微快一点。静态库是程序运行的时候已经调入内存,不管有没有调用,都会在内存里头。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。其在编译程序时若链接,程序运行时会在系统指定的路径下搜索,然后导入内存,程序一般执行时间稍微长一点,但编译的可执行文件比较小;动态库是程序运行的时候需要调用的时候才装入内存,不需要的时候是不会装入内存的。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。动态链接库的特点与优势首先让我们来看一下,把库函数推迟到程序运行时期载入的好处:1.可以实现进程之间的资源共享。什么概念呢?就是说,某个程序的在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库就是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段。2.将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。Windows就是一个很好的例子。3.甚至可以真正坐到链接载入完全由程序员在程序代码中控制。程序员在编写程序的时候,可以明确的指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源。比如现在的软件通常都能打开若干种不同类型的文件,这些读写操作通常都用动态链接库来实现。在一次运行当中,一般只有一种类型的文件将会被打开。所以直到程序知道文件的类型以后再载入相应的读写函数,而不是一开始就将所有的读写函数都载入,然后才发觉在整个程序中根本没有用到它们。静态库:在编译的时候加载生成目标文件,在运行时不用加载库,在运行时对库没有依赖性。动态库:在目标文件运行时加载,手动加载,且对库有依赖性。具体在开发中用到哪种库,我觉得还是根据实际的内存大小,ROM大小,运行的速度等综合考虑。

❹ Linux动态链接和静态链接简析

linux动态链接和静态链接简析1.生成静态链接库gcc
-c
h.c
-o
h.oar
cqs
libh.a
h.o//ar是生成库的命令,cqs是参数,libh.a是生成的静态链接库须以lib开头,h是库名,a表示是静态链接库,h.o是刚才生成目标文件2.生成动态链接库
www.shiwu.com
gcc
-c
h.c
-o
h.o生成动态链接库用gcc来完成gcc
-shared
-WI
-o
libh.so
h.o//-shared
-WI是参数,libh.so是生成的静态链接库须以lib开头,h是库名,so表示是动态链接库,h.o是刚才生成目标文件3.将生成的libh.a,libh.so拷贝到/usr/lib或/lib下4.编译带静态链接库的程序gcc
-c
test.c
-o
test.ogcc
test.o
-o
test
-WI
-Bstatic
-lh//-WI
-Bstatic表示链接静态库,-lh中-l表示链接,h是库名即/usr/lib下的libh.a5.编译带动态链接库的程序gcc
-c
test.c
-o
test.ogcc
test.o
-o
test
-WI
-Bdynamic
-lh//-WI
-Bdynamic表示链接动态库,-lh中-l表示链接,h是库名即/usr/lib下的libh.so6.运行./test得到结果
www.shiwu.com
7.其他知识有些库形如libh.so.1.0,1.0表示版本号.若要使用该库,通常要建立一个软连接,用ln
-s
libh.so.1.0
libh.so.系统不知道1.0为何意思。编译连接时同时要用动态和静态链接库,则用如下命令gcc
test.o
-o
test
-WI
-Bstatic
-lh1
-WI
-Bdynamic
-lh28.动态库和静态库的位置问题把动态库或者静态库放在/usr/lib或者/lib下,在链接的时候系统会自动到这两个目录下寻找。如果没有放在这两个目录下,则修改/etc/ld.so.conf文件,把目录写入该文件,然后ldconfig,就OK了。如果没有放在usr/lib或者/lib目录下,也不修改/etc/ld.so.conf文件,也可以在编译的时候加上
-L/路径
也可以。但是在执行的时候还是会提示找不到库的所在。
作者
llg521208

❺ linux把几个静态库链接进目标文件中

静态库不能被打包到.o 文件
在C编译中, 是.c编译成.o,然后若干个.o打包成.a
.a要比.o高一级的。 所以不能产生新的.o
你可以把.a文件解开 成为.o集合
加上你的.o文件, 共同打包成一个新的.a文件
这样是可行的。

❻ linux 怎么指定静态链接静态库

创建静态库: ar -rcs test.a *.o 查看静态库: ar -tv test.a 解压静态库: ar -x test.a 查看程序依赖的动态库: readelf -a xxx|grep library 如:可以看到,下面的交叉程序hello执行依赖于如下两个动态库。 rebi@ubuntu:~/test$ arm-none-li...

❼ linux怎样实现c语言动态库与静态库的链接

Linux系统中静态库是.a文件,编译链接.a文件只需要加上.a文件的完整的文件路径就可以了,比如:
gcc
-o
hello
hello.c
/usr/lib/libm.a
Linux系统的动态库是系统中的.so文件,编译链接动态库需要用-L参数指定动态库的搜索路径,还要用-l(这个是小写的L)指定动态库的名字,比如:
gcc
-o
hello
hello.c
-L/usr/openssl/lib
-lcrypto

❽ Linux下加载静态链接库

dll文件,貌似是windows下的动态链接库,属于pe文件。linux下怎么可能加载那种东西呢。

❾ 如何以静态链接方式交叉编译linux上的软件n

在编译命令行中,将使用的静态库文件放在源文件后面就可以了。比如:
gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定库文件的查找路径,编译器默认在当前目录下先查找指定的库文件。

热点内容
大学数据库学 发布:2025-01-23 02:54:30 浏览:588
部队营区监控系统录像存储多少天 发布:2025-01-23 02:49:26 浏览:523
oraclelinux用户名和密码 发布:2025-01-23 02:43:06 浏览:404
安卓手机主页滑动屏幕怎么设置 发布:2025-01-23 02:41:15 浏览:225
小脸解压 发布:2025-01-23 02:24:17 浏览:368
网易电脑版我的世界布吉岛服务器 发布:2025-01-23 02:20:17 浏览:985
xlc编译选项 发布:2025-01-23 02:11:25 浏览:721
电脑访问存储服务器硬盘 发布:2025-01-23 02:08:29 浏览:569
lol破解脚本 发布:2025-01-23 02:07:54 浏览:130
算法是步骤 发布:2025-01-23 01:47:22 浏览:238