静态库和动态库

20 篇文章 0 订阅

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 1027 20:01 字母学习.odp
drwxrwxr-x   6 zhanglianzhu zhanglianzhu    138 912 08:34 autoreply
-rw-rw-r--   1 zhanglianzhu zhanglianzhu 155792 81 11:16 autoreply.zip
-rw-rw-r--   1 zhanglianzhu zhanglianzhu    656 531 20:55 ChickenRabbit.sh
-rw-r--r--   1 root         root            162 925 16:39 CTest.zip
-rwxr-xr-x   1 root         root            167 522 14:40 hello.sh
drwxr-xr-x. 11 zhanglianzhu zhanglianzhu   4096 714 20:10 liscode
-rw-r--r--   1 root         root             77 522 13:48 out.txt
drwxr-xr-x   3 zhanglianzhu zhanglianzhu     37 714 20:13 shellnet
-rw-rw-r--   1 zhanglianzhu zhanglianzhu 860160 714 19:45 shellnet.tar.gz
-rw-r--r--   1 root         root          10378 523 13:02 systeminfo.txt
-rw-r--r--   1 root         root            266 522 13:46 test.txt
drwxr-xr-x   9 root         root            118 1030 12:28 WebBase
drwxr-xr-x   5 root         root            178 1016 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 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root 2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root 2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root  232 1031 10:28 Makefile
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 10:19 sub.o
[root@zlzlinux dlltest]# make
make: “libcal.a”已是最新。
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root   63 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root 2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root  232 1031 10:28 Makefile
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root 2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root  232 1031 10:28 Makefile
drwxr-xr-x 4 root root   32 1031 10:28 mathlib
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 10:19 sub.o
[root@zlzlinux dlltest]# ll mathlib
总用量 0
drwxr-xr-x 2 root root 32 1031 10:28 include
drwxr-xr-x 2 root root 22 1031 10:28 lib
[root@zlzlinux dlltest]# ll mathlib/lib
总用量 4
-rw-r--r-- 1 root root 2686 1031 10:28 libcal.a
[root@zlzlinux dlltest]# ll
总用量 32
-rw-r--r-- 1 root root   63 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:19 add.o
-rw-r--r-- 1 root root 2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root  232 1031 10:28 Makefile
drwxr-xr-x 4 root root   32 1031 10:28 mathlib
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root    48 1031 10:17 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
-rwxr-xr-x 1 root root 17496 1031 10:31 a.out
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rw-r--r-- 1 root root   149 1031 10:29 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:18 sub.c
-rw-r--r-- 1 root root    48 1031 10:18 sub.h
-rw-r--r-- 1 root root  1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root    48 1031 10:17 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
-rwxr-xr-x 1 root root 17496 1031 10:31 a.out
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   149 1031 10:29 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:18 sub.c
-rw-r--r-- 1 root root    48 1031 10:18 sub.h
-rw-r--r-- 1 root root  1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root    48 1031 10:17 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   149 1031 10:29 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:18 sub.c
-rw-r--r-- 1 root root    48 1031 10:18 sub.h
-rw-r--r-- 1 root root  1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root  48 1031 10:17 add.h
-rw-r--r-- 1 root root 149 1031 10:29 main.c
-rw-r--r-- 1 root root  63 1031 10:18 sub.c
-rw-r--r-- 1 root root  48 1031 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 1031 10:19 add.o
drwxr-xr-x 2 root root    72 1031 10:42 lddtest
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root  1232 1031 10:19 sub.o
[root@zlzlinux dlltest]# cd lddtest
[root@zlzlinux lddtest]# ll
总用量 20
-rw-r--r-- 1 root root  63 1031 10:18 add.c
-rw-r--r-- 1 root root  48 1031 10:17 add.h
-rw-r--r-- 1 root root 149 1031 10:29 main.c
-rw-r--r-- 1 root root  63 1031 10:18 sub.c
-rw-r--r-- 1 root root  48 1031 10:18 sub.h
[root@zlzlinux lddtest]# cp ./* ..
[root@zlzlinux lddtest]# ll
总用量 20
-rw-r--r-- 1 root root  63 1031 10:18 add.c
-rw-r--r-- 1 root root  48 1031 10:17 add.h
-rw-r--r-- 1 root root 149 1031 10:29 main.c
-rw-r--r-- 1 root root  63 1031 10:18 sub.c
-rw-r--r-- 1 root root  48 1031 10:18 sub.h
[root@zlzlinux lddtest]# ll ..
总用量 56
-rw-r--r-- 1 root root    63 1031 10:43 add.c
-rw-r--r-- 1 root root    48 1031 10:43 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
drwxr-xr-x 2 root root    72 1031 10:42 lddtest
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   149 1031 10:43 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:43 sub.c
-rw-r--r-- 1 root root    48 1031 10:43 sub.h
-rw-r--r-- 1 root root  1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root  48 1031 10:17 add.h
-rw-r--r-- 1 root root 149 1031 10:29 main.c
-rw-r--r-- 1 root root 232 1031 10:44 Makefile
-rw-r--r-- 1 root root  63 1031 10:18 sub.c
-rw-r--r-- 1 root root  48 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root   48 1031 10:17 add.h
-rw-r--r-- 1 root root 1240 1031 10:46 add.o
-rwxr-xr-x 1 root root 8128 1031 10:46 libcal.so
-rw-r--r-- 1 root root  149 1031 10:29 main.c
-rw-r--r-- 1 root root  246 1031 10:46 Makefile
drwxr-xr-x 4 root root   32 1031 10:46 mathlib
-rw-r--r-- 1 root root   63 1031 10:18 sub.c
-rw-r--r-- 1 root root   48 1031 10:18 sub.h
-rw-r--r-- 1 root root 1232 1031 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 1031 10:18 add.c
-rw-r--r-- 1 root root    48 1031 10:17 add.h
-rw-r--r-- 1 root root  1240 1031 10:46 add.o
-rwxr-xr-x 1 root root  8128 1031 10:46 libcal.so
-rwxr-xr-x 1 root root 17472 1031 10:47 main
-rw-r--r-- 1 root root   149 1031 10:29 main.c
-rw-r--r-- 1 root root   246 1031 10:46 Makefile
drwxr-xr-x 4 root root    32 1031 10:46 mathlib
-rw-r--r-- 1 root root    63 1031 10:18 sub.c
-rw-r--r-- 1 root root    48 1031 10:18 sub.h
-rw-r--r-- 1 root root  1232 1031 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 1031 10:43 add.c
-rw-r--r-- 1 root root    48 1031 10:43 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
drwxr-xr-x 3 root root   173 1031 10:53 lddtest
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   149 1031 10:43 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:43 sub.c
-rw-r--r-- 1 root root    48 1031 10:43 sub.h
-rw-r--r-- 1 root root  1232 1031 10:19 sub.o
[root@zlzlinux dlltest]# vi doc.txt
[root@zlzlinux dlltest]# ll
总用量 60
-rw-r--r-- 1 root root    63 1031 10:43 add.c
-rw-r--r-- 1 root root    48 1031 10:43 add.h
-rw-r--r-- 1 root root  1240 1031 10:19 add.o
-rw-r--r-- 1 root root    57 1031 10:54 doc.txt
drwxr-xr-x 3 root root   173 1031 10:53 lddtest
-rw-r--r-- 1 root root  2686 1031 10:20 libcal.a
-rwxr-xr-x 1 root root 17496 1031 10:31 main
-rw-r--r-- 1 root root   149 1031 10:43 main.c
-rw-r--r-- 1 root root   232 1031 10:28 Makefile
drwxr-xr-x 4 root root    32 1031 10:28 mathlib
-rw-r--r-- 1 root root    63 1031 10:43 sub.c
-rw-r--r-- 1 root root    48 1031 10:43 sub.h
-rw-r--r-- 1 root root  1232 1031 10:19 sub.o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值