gcc测试静态库和动态库(.a .so)。linux命令练习☺
两个数相加
#pragma once
extern int my_add(int x, int y);
两个数相减
#pragma once
extern int my_sub(int x, int y);
两个数相加实现
#include "add.h"
int my_add(int x, int y)
{
return x + y;
}
两个数相减实现
#include "sub.h"
int my_sub(int x, int y)
{
return x - y;
}
调用测试
#include <stdio.h>
#include <add.h>
int main()
{
int x = 20;
int y = 10;
int z = my_add(x, y);
printf("%d + %d = %d\n", x, y, z);
return 0;
}
制作静态库Makefile
mylib=libcal.a
$(mylib):add.o sub.o
ar -rc -o $(mylib) $^
%.o:%.c
gcc -c $<
.PHONY:clean
rm -rf $(mylib) ./*.o
.PHONY:output
output:
mkdir -p mathlib/include
mkdir -p mathlib/lib
cp ./*.h mathlib/include
cp ./*.a mathlib/lib
制作动态库Makefile
mylib=libcal.so
$(mylib):add.o sub.o
gcc -shared -o $(mylib) $^
%.o:%.c
gcc -fPIC -c $<
.PHONY:clean
rm -rf $(mylib) ./*.o
.PHONY:output
output:
mkdir -p mathlib/include
mkdir -p mathlib/lib
cp ./*.h mathlib/include
cp ./*.so mathlib/lib
测试过程
[BEGIN] 2021/10/31 10:16:54
../..//usr/lib64/dotnet/dotnet: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=49030d545cb4f9004b217dc252e1209d0f2da43b, stripped
[root@zlzlinux ~]# pwd
/root
[root@zlzlinux ~]# cd /zlz
[root@zlzlinux zlz]# ll
总用量 1048
-rw-rw-r-- 1 zhanglianzhu zhanglianzhu 12476 10月 27 20:01 字母学习.odp
drwxrwxr-x 6 zhanglianzhu zhanglianzhu 138 9月 12 08:34 autoreply
-rw-rw-r-- 1 zhanglianzhu zhanglianzhu 155792 8月 1 11:16 autoreply.zip
-rw-rw-r-- 1 zhanglianzhu zhanglianzhu 656 5月 31 20:55 ChickenRabbit.sh
-rw-r--r-- 1 root root 162 9月 25 16:39 CTest.zip
-rwxr-xr-x 1 root root 167 5月 22 14:40 hello.sh
drwxr-xr-x. 11 zhanglianzhu zhanglianzhu 4096 7月 14 20:10 liscode
-rw-r--r-- 1 root root 77 5月 22 13:48 out.txt
drwxr-xr-x 3 zhanglianzhu zhanglianzhu 37 7月 14 20:13 shellnet
-rw-rw-r-- 1 zhanglianzhu zhanglianzhu 860160 7月 14 19:45 shellnet.tar.gz
-rw-r--r-- 1 root root 10378 5月 23 13:02 systeminfo.txt
-rw-r--r-- 1 root root 266 5月 22 13:46 test.txt
drwxr-xr-x 9 root root 118 10月 30 12:28 WebBase
drwxr-xr-x 5 root root 178 10月 16 13:01 ztree
[root@zlzlinux zlz]# mkdir dlltest
[root@zlzlinux zlz]# cd dlltest
[root@zlzlinux dlltest]# ls
[root@zlzlinux dlltest]# vi add.h
[root@zlzlinux dlltest]# ls
add.h
[root@zlzlinux dlltest]# vi add.c
[root@zlzlinux dlltest]# vi sub.h
[root@zlzlinux dlltest]# vi sub.c
[root@zlzlinux dlltest]# ls
add.c add.h sub.c sub.h
[root@zlzlinux dlltest]# gcc -c add.c
[root@zlzlinux dlltest]# gcc -c sub.c
[root@zlzlinux dlltest]# ll
总用量 24
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# ar -rc libcal.a add.0 sub.o
ar: add.0: 没有那个文件或目录
[root@zlzlinux dlltest]# ar -rc libcal.a add.o sub.o
[root@zlzlinux dlltest]# ll
总用量 28
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# ar -tv libcal.a
rw-r--r-- 0/0 1240 Oct 31 10:19 2021 add.o
rw-r--r-- 0/0 1232 Oct 31 10:19 2021 sub.o
[root@zlzlinux dlltest]# vi Makefile
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# make
make: “libcal.a”已是最新。
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# make output
mkdir -p mathlib/include
mkdir -p mathlib/lib
cp ./*.h mathlib/include
cp ./*.a mathlib/lib
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# ll mathlib
总用量 0
drwxr-xr-x 2 root root 32 10月 31 10:28 include
drwxr-xr-x 2 root root 22 10月 31 10:28 lib
[root@zlzlinux dlltest]# ll mathlib/lib
总用量 4
-rw-r--r-- 1 root root 2686 10月 31 10:28 libcal.a
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# vi main.c
[root@zlzlinux dlltest]# gcc main.c -I./mathlib/include -L./mathlib/lib -lcal
[root@zlzlinux dlltest]# ll
总用量 56
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rwxr-xr-x 1 root root 17496 10月 31 10:31 a.out
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# gcc -o main main.c -I./mathlib/include -L./mathlib/lib -lcal
[root@zlzlinux dlltest]# ll
总用量 76
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rwxr-xr-x 1 root root 17496 10月 31 10:31 a.out
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# rm a.out
rm:是否删除普通文件 'a.out'?y
[root@zlzlinux dlltest]# ll
总用量 56
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# ./mian
-bash: ./mian: 没有那个文件或目录
[root@zlzlinux dlltest]# ./main
20 + 10 = 30
[root@zlzlinux dlltest]# ldd main
linux-vdso.so.1 (0x00007ffd986cb000)
libc.so.6 => /lib64/libc.so.6 (0x00007f208c68d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f208ca52000)
[root@zlzlinux dlltest]# mkdir lddtest
[root@zlzlinux dlltest]# mv ./*.c lddtest
[root@zlzlinux dlltest]# mv ./*.h lddtest
[root@zlzlinux dlltest]# ll lddtest
总用量 20
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
[root@zlzlinux dlltest]# cd lddtest
[root@zlzlinux lddtest]# cd ..
[root@zlzlinux dlltest]# ll
总用量 36
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
drwxr-xr-x 2 root root 72 10月 31 10:42 lddtest
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# cd lddtest
[root@zlzlinux lddtest]# ll
总用量 20
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
[root@zlzlinux lddtest]# cp ./* ..
[root@zlzlinux lddtest]# ll
总用量 20
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
[root@zlzlinux lddtest]# ll ..
总用量 56
-rw-r--r-- 1 root root 63 10月 31 10:43 add.c
-rw-r--r-- 1 root root 48 10月 31 10:43 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
drwxr-xr-x 2 root root 72 10月 31 10:42 lddtest
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 149 10月 31 10:43 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:43 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:43 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux lddtest]# cd ..
[root@zlzlinux dlltest]# cp Makefile lddtest
[root@zlzlinux dlltest]# cd lddtest
[root@zlzlinux lddtest]# ll
总用量 24
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 232 10月 31 10:44 Makefile
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
[root@zlzlinux lddtest]# vi Makefile
[root@zlzlinux lddtest]# make output
mkdir -p mathlib/include
mkdir -p mathlib/lib
cp ./*.h mathlib/include
cp ./*.so mathlib/lib
cp: 无法获取'./*.so' 的文件状态(stat): 没有那个文件或目录
make: *** [Makefile:13:output] 错误 1
[root@zlzlinux lddtest]# make
gcc -fPIC -c add.c
gcc -fPIC -c sub.c
gcc -shared -o libcal.so add.o sub.o
[root@zlzlinux lddtest]# make output
mkdir -p mathlib/include
mkdir -p mathlib/lib
cp ./*.h mathlib/include
cp ./*.so mathlib/lib
[root@zlzlinux lddtest]# ll
总用量 40
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:46 add.o
-rwxr-xr-x 1 root root 8128 10月 31 10:46 libcal.so
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 246 10月 31 10:46 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:46 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:46 sub.o
[root@zlzlinux lddtest]# gcc -o main main.c -I./mathlib/include -L./mathlib/lib -lcal
[root@zlzlinux lddtest]# ll
总用量 60
-rw-r--r-- 1 root root 63 10月 31 10:18 add.c
-rw-r--r-- 1 root root 48 10月 31 10:17 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:46 add.o
-rwxr-xr-x 1 root root 8128 10月 31 10:46 libcal.so
-rwxr-xr-x 1 root root 17472 10月 31 10:47 main
-rw-r--r-- 1 root root 149 10月 31 10:29 main.c
-rw-r--r-- 1 root root 246 10月 31 10:46 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:46 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:18 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:18 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:46 sub.o
[root@zlzlinux lddtest]# ldd main
linux-vdso.so.1 (0x00007ffcd338e000)
libcal.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f9e8a918000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9e8acdd000)
[root@zlzlinux lddtest]# vi ~/.bash_profile
[root@zlzlinux lddtest]# ldd main
linux-vdso.so.1 (0x00007ffc7d7d3000)
libcal.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f3ca1766000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3ca1b2b000)
[root@zlzlinux lddtest]# source ~/.bashrc
[root@zlzlinux lddtest]# ldd main
linux-vdso.so.1 (0x00007fff2eb9a000)
libcal.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f25e7747000)
/lib64/ld-linux-x86-64.so.2 (0x00007f25e7b0c000)
[root@zlzlinux lddtest]# source ~/.bash_profile
[root@zlzlinux lddtest]# ldd main
linux-vdso.so.1 (0x00007ffc78990000)
libcal.so => ./libcal.so (0x00007fa749ce7000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa749922000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa749ee9000)
[root@zlzlinux lddtest]# ./main
20 + 10 = 30
[root@zlzlinux lddtest]# vi doc.txt
[root@zlzlinux lddtest]# cd ..
[root@zlzlinux dlltest]# ll
总用量 56
-rw-r--r-- 1 root root 63 10月 31 10:43 add.c
-rw-r--r-- 1 root root 48 10月 31 10:43 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
drwxr-xr-x 3 root root 173 10月 31 10:53 lddtest
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 149 10月 31 10:43 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:43 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:43 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o
[root@zlzlinux dlltest]# vi doc.txt
[root@zlzlinux dlltest]# ll
总用量 60
-rw-r--r-- 1 root root 63 10月 31 10:43 add.c
-rw-r--r-- 1 root root 48 10月 31 10:43 add.h
-rw-r--r-- 1 root root 1240 10月 31 10:19 add.o
-rw-r--r-- 1 root root 57 10月 31 10:54 doc.txt
drwxr-xr-x 3 root root 173 10月 31 10:53 lddtest
-rw-r--r-- 1 root root 2686 10月 31 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 10月 31 10:31 main
-rw-r--r-- 1 root root 149 10月 31 10:43 main.c
-rw-r--r-- 1 root root 232 10月 31 10:28 Makefile
drwxr-xr-x 4 root root 32 10月 31 10:28 mathlib
-rw-r--r-- 1 root root 63 10月 31 10:43 sub.c
-rw-r--r-- 1 root root 48 10月 31 10:43 sub.h
-rw-r--r-- 1 root root 1232 10月 31 10:19 sub.o