首页 > 代码库 > 2.0 库函数的构建

2.0 库函数的构建

在结构体程序中的字节对齐情况下读取字符长度的方法,其程序如下:


如图所示在程序中有charintshort三种类型:程序在读取时是按照四字节对齐的方式读取的(即每四个字节读一次),在程序中计算机会先读取char型,读取的长度为2个字节,由于int所占用的是4个字节,所以在读取int时计算机会自动选择4的倍数进行读取,即会在读取char2个字节后会在空出两个字节,然后再读取int4个字节,这时计算机读取了8个字节,然后计算机会再读取short2个字节,再紧接着读取char1个字节,又因为计算机是按照四字节对齐进行读取长度的,所以它会在char后自动空出1个长度,所以此时计算机读取的长度为12。即程序的运行结果为:length=12

 

静态库的编译:

ar   -rs  libmy_math.a   *.o

这段指令的含义为:将所有的.o文件打包成libmy_math.a(静态库)my_math为静态库的库名。

ar    -t libmy_math.a

这段指令的含义为:将.o文件打包到静态库内。

gcc   file.c(写主函数的文件)  -L.  –lmy_math -o  file

这段指令的含义为:将file.c文件编译成可执行文件file。其中的L.表示后面跟的是路径,即仓库的位置。

 

动态库的编译:

gcc  -Fpic  *.c

这段指令的含义为:将所有的.c文件汇编成.o文件。

gcc  -shared -o  lib_math.so  *.o

这段指令的含义为:将.o文件汇编成动态库lib_math.so(动态库)

Ldd  file                  表示查看链接。

export  LD_LIBRARY_PATH=$LD_LIBARY_PATH:.

这段指令的含义表示为:当运行加载时找到当前路径下的动态库。

echo  $LD_LIBARAY

这段指令的含义为:查看程序有没有配置过路径,如有会显示(.)

 

动态库的更新:

一、    先把.h文件移动到/usr/include

二、    把原有动态库移动到/usr/lib

三、改变定义里面的文件

四、先用gcc  -fPIC     -c  *.c编译成.o文件

五、再用gcc -shared  -o  libmy_math.so *.o编译后会生成my_math.so(动态库)

六、把动态库移动到/usr/lib下,将原来的动态库覆盖。

七、用gcc file.c  -lmy_math  -o file进行编译。

七、利用./file(可执行文件)查看。

注:动态库的更新,只是更改的是定义里的东西,所以动态库的框架是不动的。