静态库和动态库的区别:.so动态库,.a静态库
头文件 myprint.h
#ifndef __MY_PRINT_
#define __MY_PRINT_
#include <stdio.h>
void print();
#endif
源文件 myprint.cpp
#include "myprint.h"
void print()
{
printf("make .a and .so\n");
}
main文件:
#include "myprint.h"
int main()
{
print();
return 0;
}
静态库制作:
gcc -c myprint.cpp
生成myprint.o文件
ar -cr libmyprint.a myprint.o
生成libmyprint.a
静态库的使用
gcc -o main main.c -static -lmyprint -L.
-L指定链接时静态库的路径 ,"."表示当前路径。
执行./main即可,此时main可以拷贝到任何位置都可以执行,不再需要外部库的支持。
动态库制作:
gcc -c myprint.cpp
生成myprint.o文件
gcc -shared -fpic libmyprint.so myprint.o
生成libmyprint.so
动态链接库的使用
gcc -o main main.c -lmyprint -L.
运行./main
发现报错,找不到动态链接库libmyprint.so
这是因为在进行动态链接的时候,程序并不会在当前目录下寻找,二是在系统默认路径下寻找,/usr/lib。我们可以将libmyprint.so移到该目录下,再来执行main。但是这种方法不推荐,还有另一种方法,在运行程序前,指定库路径
LD_LIBRARY_PATH=. ./main
此时可以看到程序执行成功