linux中制作动静态库
add.c mul.c main.c 文件如下:
tinychan@ubuntu:~/Desktop/gcc$ cat add.c mul.c main.c
//
// Created by tinychan on 4/25/20.
//
int add(int a,int b){
return a+b;
}
//
// Created by tinychan on 4/25/20.
//
int mul(int a,int b){
return a*b;
}
#include <stdio.h>
#include "add.h"
#include "mul.h"
int main() {
int sum=add(1,2);
int result=mul(2,3);
printf("HelloWorld! %d ,%d\n",sum,result);
#ifdef DE_DEBUG
printf("DET_DEBUG\n");
#endif
return 0;
}
制作静态库:
1.生成.o文件
gcc -c *.c -I ./include/
2.生成静态库
ar rcs libmath.a *.o
3.使用静态库
gcc main.c -I ./include/ -L ./ -lmath
制作动态库
1.生成与位置无关的.o 文件
gcc -fPIC -c
2.生成so文件
3.使用so
tinychan@ubuntu:~/Desktop/gcc$ gcc -fPIC -c *.c -I ./include/
tinychan@ubuntu:~/Desktop/gcc$ gcc -shared -o libmath.so -I ./include/ *.o
tinychan@ubuntu:~/Desktop/gcc$ gcc main.c -o app -I ./include/ -L ./ -lmath
tinychan@ubuntu:~/Desktop/gcc$ ./app
./app: error while loading shared libraries: libmath.so: cannot open shared object file: No such file or directory
tinychan@ubuntu:~/Desktop/gcc$ pwd
/home/tinychan/Desktop/gcc
tinychan@ubuntu:~/Desktop/gcc$ gcc main.c -o app.out -I ./include/ -L ./ -lmath -Wl,-rpath /home/tinychan/Desktop/gcc
tinychan@ubuntu:~/Desktop/gcc$ ls
add.c add.o app app.out include lib libmath.so main.c main.o mul.c mul.o
tinychan@ubuntu:~/Desktop/gcc$ ./app.out
HelloWorld! 3 ,6
说明: cannot open shared object file: No such file or directory . linux默认lib\user下的库文件中需找so,需要配置动态库的路径,可以使用-Wl,-rpath 或者设置环境变量.
环境变量配置法如下(但是建议使用-Wl,-rpath)
指定方法:
1. 环境变量法:export LD_LIBRARY_PATH=./ 将当前目录加入环境变量,但是终端退出了就无效了。
2. 配置文件法:将上条写入家目录下.bashrc文件中 (永久生效,设置到~/.bashrc)
3. 拷贝法:直接将libmymath.so文件拷贝到/usr/lib/目录下。(受libc库的启发)
4. 缓存文件法:将libmymath.so所在绝对路径加入到/etc/ld.so.conf文件,
使用sudo ldconfig -v 动态更新/etc/ld.so.cache文件(2进制文件)
网友评论