在结构体程序中的字节对齐情况下读取字符长度的方法,其程序如下:
如图所示在程序中有char、int、short三种类型:程序在读取时是按照四字节对齐的方式读取的(即每四个字节读一次),在程序中计算机会先读取char型,读取的长度为2个字节,由于int所占用的是4个字节,所以在读取int时计算机会自动选择4的倍数进行读取,即会在读取char的2个字节后会在空出两个字节,然后再读取int的4个字节,这时计算机读取了8个字节,然后计算机会再读取short的2个字节,再紧接着读取char的1个字节,又因为计算机是按照四字节对齐进行读取长度的,所以它会在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(可执行文件)查看。
注:动态库的更新,只是更改的是定义里的东西,所以动态库的框架是不动的。
2.0 库函数的构建