测试环境及工具
- Ubuntu 16.04
- gcc version 5.4.0 20160609
- ar (GNU Binutils for Ubuntu) 2.26.1
测试源码
测试目录
├── include
│ └── head.h
├── lib
├── main.c
└── src
├── add.c
├── div.c
├── mul.c
└── sub.c
源文件
head.h
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
main.c
#include <stdio.h>
#include "include/head.h"
int main(int argc, char const *argv[])
{
int a=12;
int b=4;
printf("%d+%d=%d\n",a,b,add(a,b));
printf("%d-%d=%d\n",a,b,sub(a,b));
printf("%d*%d=%d\n",a,b,mul(a,b));
printf("%d/%d=%d\n",a,b,div(a,b));
return 0;
}
add.c
#include "head.h"
int add(int a,int b){
return a+b;
}
sub.c
#include "head.h"
int sub(int a,int b){
return a-b;
}
mul.c
#include "head.h"
int mul(int a,int b){
return a*b;
}
div.c
#include "head.h"
int div(int a,int b){
return a/b;
}
静态库
静态库命名方式:lib+库名,静态库的后缀为".a"。
编译过程
ubuntu@ubuntu:~/Desktop/test$ cd src
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c div.c mul.c sub.c
ubuntu@ubuntu:~/Desktop/test/src$ gcc *.c -I ../include -c
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c add.o div.c div.o mul.c mul.o sub.c sub.o
ubuntu@ubuntu:~/Desktop/test/src$ ar rcs -o libtest.a *.o
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c add.o div.c div.o libtest.a mul.c mul.o sub.c sub.o
ubuntu@ubuntu:~/Desktop/test/src$ mv libtest.a ../lib/
ubuntu@ubuntu:~/Desktop/test/src$ cd ../
ubuntu@ubuntu:~/Desktop/test$ ls lib/
libtest.a
ubuntu@ubuntu:~/Desktop/test$ gcc main.c -L lib -l test -o main
ubuntu@ubuntu:~/Desktop/test$ ./main
12+4=16
12-4=8
12*4=48
12/4=3
共享库(动态库)
共享库命名方式:lib+库名,共享库的后缀为".so"。
编译过程
ubuntu@ubuntu:~/Desktop/test$ cd src
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c add.o div.c div.o mul.c mul.o sub.c sub.o
ubuntu@ubuntu:~/Desktop/test/src$ rm *.o
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c div.c mul.c sub.c
ubuntu@ubuntu:~/Desktop/test/src$ gcc *.c -fPIC -c -I ../include/
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c add.o div.c div.o mul.c mul.o sub.c sub.o
ubuntu@ubuntu:~/Desktop/test/src$ gcc -shared *.o -o libtest.so
ubuntu@ubuntu:~/Desktop/test/src$ ls
add.c add.o div.c div.o libtest.so mul.c mul.o sub.c sub.o
ubuntu@ubuntu:~/Desktop/test/src$ mv libtest.so ../lib/
ubuntu@ubuntu:~/Desktop/test/src$ cd ..
ubuntu@ubuntu:~/Desktop/test$ ls lib/
libtest.a libtest.so
ubuntu@ubuntu:~/Desktop/test$ gcc main.c -L lib/ -l test -o main1
ubuntu@ubuntu:~/Desktop/test$ ./main1
./main1: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
ubuntu@ubuntu:~/Desktop/test$ ldd main1
linux-vdso.so.1 => (0x00007ffe51faf000)
libtest.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe47414f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe474519000)
ubuntu@ubuntu:~/Desktop/test$ export LD_LIBRARY_PATH=./lib/
ubuntu@ubuntu:~/Desktop/test$ ldd main1
linux-vdso.so.1 => (0x00007ffda9b42000)
libtest.so => ./lib/libtest.so (0x00007f74bffbd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f74bfbf3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f74c01bf000)
ubuntu@ubuntu:~/Desktop/test$ ./main1
12+4=16
12-4=8
12*4=48
12/4=3