700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux 如何产生so文件 printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

linux 如何产生so文件 printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

时间:2023-07-29 10:41:04

相关推荐

linux 如何产生so文件 printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

本文仅限于介绍 linux 下的库。

1.2、 库的种类

linux 下的库有两种:静态库和共享库(动态库)。

二者的不同点在于代码被载入的时刻不同。

静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。

静态用.a为后缀, 例如: libhello.a

共享库(动态库)的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

动态通常用.so为后缀, 例如:libhello.so

共享库(动态库)的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。

为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。

libbrokenlocale.so.1 libgcc_s.so libnss_dns-2.5.so libnss_nis.so.2 libthread_db-1.0.so。

两者换算关系为:r=ln(1+r0)或r0=exp(r)-1例如r0=0.06,则r=ln(1+0.06)=0.0583,即100以583%的连续复利投资第二年将获106,该结果与直接用r0=0.06计算的答案一致。

例如r0=0.06,则r=ln(1+0.06)=0.0583,即100以583%的连续复利投资第二年将获106,该结果与直接用r0=0.06计算的答案一致。

a需=-103.6 ×ln(1-0.9975)÷0.08。

1.3、静态库,动态库文件在linux下是如何生成的:

以下面的代码为例,生成上面用到的hello库:

#include 'hello.h'

void sayhello()

{

printf('hello,world ');

}

首先用gcc编绎该文件,在编绎时可以使用任何合法的编绎参数,例如-g加入调试代码等:

$gcc -c hello.c -o hello.o

1、生成静态库 生成静态库使用ar工具,其实ar是archive的意思

$ar cqs libhello.a hello.o

2、生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号:

$gcc -shared -o libhello.so.1.0 hello.o

1.4、库文件是如何命名的,有没有什么规范:

在 linux 下,库文件一般放在/usr/lib和/lib下,

静态库的名字一般为libxxxx.a,其中 xxxx 是该lib的名称;

动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号

1.5、可执行程序在执行的时候如何定位共享库(动态库)文件 :

而且,对于win8系统,它利用uefi安全启动以及固件中存储的证书与平台固件之间创建一个信任源,可以确保在加载操作系统之前,近能够执行已签名并获得认证的“已知安全”代码和启动加载程序,可以防止用户在根路径中执行恶意代码。

单击new,选择python解释器python.exe,打开后显示出一个包含很多复选框的窗口,选择需要加入系统pythonpath的路径,单击ok。

同理,单击new,选择d:\jython2.5.3目录下的jython.jar包,打开后显示出一个包含很多复选框的窗口,选择需要加入系统pythonpath的路径,单击ok。

#你需要知道解释器的完成路径名称。

对于 elf 格式的可执行程序,是由 ld-linux.so* 来完成的,它先后搜索 elf 文件的 DT_RPATH段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache 文件列表— /lib/,/usr/lib目录找到库文件后将其载入内存

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-/a/ruanjian/article-90979-2.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。