ubuntu静态库和动态库制作

库文件将源代码编译成二进制文件,封装起来供他人或自己调用,在库文件上只能调用而不能查看库文件的相关内容,达到源代码保密的效果,也防止不小心修改了源代码的问题

Linux下库文件分为两类:静态库(.a)和动态库(.so)

静态库的制作:

1.将.c文件编译成.o文件

gcc source.c -o source.o -c

或者可简写为

gcc -c source.c

2.将.o文件编译成.a文件(静态库文件)

ar -rc libsource.a source.o

-r 将文件插入到库文件中 -c建立库文件

3.使用时,只需要将.a文件当成普通的.c或者.o文件加入gcc编译即可

gcc main.c libsource.a -o main

注意:有时候库文件的顺序会影响编译的结果

实际项目中,静态库的使用是少见的,原因是静态库在编译阶段与源文件链接,会造成生成的最终可执行程序过大,那么动态库就是解决静态库这种问题的

动态库的制作

1.把.c文件编译成.so动态库

gcc -fpic -shared source.c -o libsource.so

2.在工程编译的时候,将动态库的路径和名字(source)加载进来--注意动态库的库文件名字

gcc -o project main.c -L <库文件路径> -l库文件名字
gcc main.c -o project  -L ./ -lsource

3.执行时候系统会自动去(/lib)中查找该库文件,如果没有查找到会报错

解决办法:

                第一种方法:把libsource.so考本到/lib中

                第二种方法:添加环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<库文件所在路径>

两者区别:

一、在编译上,静态库使用.o文件生成静态库,动态库使用.c文件直接生成静态库

二、在编译工程项目时,需要将静态库也作为其中的“材料”来编译,而动态库只需要main.c但是需要将动态库文件存放于/lib目录下或者通过添加环境变量指定动态库所在的位置

三、静态库由于编译工程的时候已经把静态库文件组合成可执行程序,执行时,只需直接运行生成的目标程序即可,动态库由于只是在编译的时候记录了动态库的路径以及动态库的名字,因此在运行的时候需要将动态库文件存放在/lib或者添加环境变量

四、生成静态库和动态库的使用的命令不一样,静态库使用ar -rc 动态库使用gcc

你可能感兴趣的:(ubuntu,linux,运维)