动态库(.so)是Linux下封装常用函数为公共库的最实用选择,因其复用性高、更新便利且内存效率优;需经写头文件与实现、-fPIC编译、-shared打包、链接使用及配置LD_LIBRARY_PATH或ldconfig五步完成。

把常用函数封装成可复用的公共库,核心是让别人(或未来的你)不用复制粘贴源码、不用重复编译,只需链接就能调用。在 Linux 下,主流做法是做成动态库(.so),兼顾复用性、更新便利性和内存效率。
动态库是最实用的选择
静态库(.a)会把代码直接塞进每个可执行文件,体积大、升级要全量重编;而动态库(.so)只存一份,多个程序共用,更新时换掉 .so 文件即可,主程序完全不用动。
封装步骤很清晰,分五步走
-
写好头文件和实现文件
头文件定义接口,用#ifndef / #define / #endif防重复包含;C++ 项目必须加extern "C"避免名称修饰导致链接失败。
例如myutils.h:#ifndef MYUTILS_H #define MYUTILS_H #ifdef __cplusplus extern "C" { #endif int max_int(int a, int b); int min_int(int a, int b); #ifdef __cplusplus } #endif #endif -
编译生成位置无关的目标文件
关键是-fPIC参数,它让代码不依赖固定内存地址,才能被多个进程共享。gcc -fPIC -c myutils.c -o myutils.o
-
打包成共享库文件
库名按惯例以lib开头、.so结尾,比如libmyutils.so:gcc -shared -o libmyutils.so myutils.o
-
编译使用方程序时链接库
-L.指定当前目录找库,-lmyutils表示链接libmyutils.so(自动去掉lib和.so):
Linux Security Scanner下载Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
gcc main.c -L. -lmyutils -o main
-
运行前确保系统能找到库
三种常用方式任选其一:- 临时生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. - 永久生效(需 root):把库路径写入
/etc/ld.so.conf.d/myutils.conf,再执行sudo ldconfig - 或直接把
libmyutils.so放到/usr/local/lib,再运行sudo ldconfig
- 临时生效:
验证是否成功?运行 ldd ./main,能看到 libmyutils.so => ... 就说明链接上了。
不复杂但容易忽略

















