静态库
mylib.c
#include <stdio.h> void mylib_api(void); void mylib_api(void) { printf("mylib printf\r\n"); }
main.c
#include <stdio.h> void mylib_api(void); int main() { mylib_api(); return 0; }
编译静态库
gcc -c mylib.c ar cr libmylib.a mylib.o
这里说明一下静态库分为静态库文件名和静态库名
libmylib.c是库文件名
mylib是库名
编译使用静态库的main.c
gcc main.c -lmylib -L ./
-l后面跟的是库名
-L后面跟的是静态库文件的路径这里的静态库文件就在本目录所以直接./
动态库
我们还是采用刚才的两个.c文件,编译动态库
gcc -c -fpic mylib.c gcc -shared -o libmylib.so mylib.o
编译程序:使用静态库和动态库都是一样的编译方法
gcc main.c -lmylib -L ./
到这里我们可运行程序是生成了但是还是无法运行
因为他是属于动态加载的所以他在运行的时候需要找到这个库文件的位置,这里一共有三种方法
- 1、将.so动态库文件放置在/lib或者/usr/lib文件夹,系统在运行是默认会去这两个文件夹寻找动态库文件
- 2、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:这里跟我们动态库的路径;这种方法在commod窗口重启后失效
- 3、将动态库的存放位置添加到环境变量中在/etc/ld.so.conf文件末添加动态库存放位置,添加完成使用ldconfig刷新生效