当我们完成的代码需要向外展示内容,又不想别人看到自己的源代码的时候,我们可以通过动态库,在给出头文件过后,别人就可以使用这个代码的时候,无从获知自己的代码,从而保证自己的代码的所有权。
动态库:代码编译生成一个".so"的文件,当需要执行的时候,系统把这个".so"文件加载到内存中去,从而我们可以节省硬盘空间,库放在/lib,/usr/lib下,头文件放在/usr/include下。
静态库:静态库在linux下名为libxx.a,静态函数库编译成的文件比较大,因为整个函数库的所有数据都被整合进目标代码中,静态链接的程序不用动态库就可以直接执行,而动态链接的必须要动态库才能执行。
当我们编写完成代码过后,我们通过"gcc *.c -static"来静态编译,然后我们可以看到生成的可执行文件a.out的大小比我们不通过静态编译生成的文件的大小要大很多。
静态库的制作:
gcc -c *.c 当我们需要通过gcc 把.c的文件编译生成.o的文件,过后ar -rcs 把所有的.o文件打包生成一个libxx.a的文件。当别人需要用到自己的代码时,我们就可以给他这个静态库的文件,且他还不知道我们的源代码。
动态库的制作:
gcc -shared -fpic -o 我们把*.c的文件打包生成一个libxx.so的文件