本文仅限于介绍 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