先确认缺失的是开发包而非运行时库:ubuntu/debian需装libglib2.0-dev等-dev包,rhel/centos需装glib2-devel等-devel包;再验证pkg-config --modversion glib-2.0能否返回版本号;最后检查ld_library_path或ldconfig配置是否覆盖非标准库路径。

依赖没装全,./configure 直接报错说找不到库怎么办
常见现象是运行 ./configure 时提示类似 configure: error: Package requirements (glib-2.0 >= 2.40) were not met 或 checking for zlib.h... no。这不是 configure 脚本写错了,而是系统里缺头文件或 pkg-config 能识别的 .pc 文件。
解决思路分三步:
- 先确认缺失的是运行时库还是开发包:Ubuntu/Debian 系统上,
libz1是运行时库,zlib1g-dev才带zlib.h和链接用的符号;RHEL/CentOS/Fedora 上对应的是zlib和zlib-devel - 用
apt search(Debian系)或dnf search(RHEL系)查开发包名,别只搜库名——比如要装 GLib 开发支持,得搜libglib2.0-dev(Ubuntu)或glib2-devel(Fedora),而不是glib - 装完后别急着重跑
./configure,先执行pkg-config --modversion glib-2.0(把 glib-2.0 换成报错里提到的名字)验证是否被识别;如果返回版本号,说明开发环境已就位
make install 后程序启动报 libxxx.so.xxx: cannot open shared object file
这说明编译时链接了库,但运行时动态链接器找不到它。不是没装库,而是没告诉系统去哪找。
典型原因和应对方式:
- 库装在非标准路径(比如
/usr/local/lib或自定义的/opt/mylib),而/etc/ld.so.conf.d/下没对应配置文件,或者没运行sudo ldconfig - 用户级安装(如
./configure --prefix=$HOME/local)后,没把$HOME/local/lib加进LD_LIBRARY_PATH环境变量,临时可用export LD_LIBRARY_PATH="$HOME/local/lib:$LD_LIBRARY_PATH",但长期建议写进~/.bashrc - 64 位系统上误装了 32 位开发包(或反过来),导致
.so文件架构不匹配;用file /path/to/libxxx.so查看实际架构,再核对安装包是否匹配
用 apt 或 dnf 安装时提示 “无法满足依赖” 且源里没有候选包
这通常不是网络问题,而是发行版仓库策略导致的:基础仓库只提供稳定版本,新项目需要的较新依赖可能根本不在默认源中。
可操作的解法有限但明确:
- 检查是否启用了扩展源:Ubuntu 用户确认
universe和multiverse已启用(/etc/apt/sources.list里对应行没被注释);RHEL/CentOS 用户确认epel源已配置并启用(sudo dnf install epel-release) - 别用
rpm -i --nodeps强装——看似成功,后续几乎必然崩溃;更稳妥的是从源码编译那个缺失的依赖(比如某个新版libfoo),装到/usr/local,再确保pkg-config和ldconfig能识别它 - 某些场景下,用
apt download(Debian/Ubuntu)或dnf download(RHEL/Fedora)先把依赖包拉下来,再手动检查dpkg -I或rpm -qpR看它到底依赖什么,比盲目猜更可靠
交叉编译或容器内构建时,pkg-config 找不到目标平台的依赖
这是环境隔离带来的典型问题:pkg-config 默认查本地系统的 .pc 文件,但交叉编译需要的是目标平台(比如 ARM)的版本。
关键点在于路径控制:
- 设置
PKG_CONFIG_SYSROOT_DIR指向目标根文件系统(如/path/to/arm-rootfs),pkg-config会自动把prefix替换为该路径 - 同时指定
PKG_CONFIG_PATH指向目标平台的lib/pkgconfig目录(例如/path/to/arm-rootfs/usr/lib/pkgconfig),否则即使有 sysroot,也找不到 .pc 文件 - 容器场景下,如果基础镜像没装
pkg-config,光复制.pc文件没用;必须确保容器内pkg-config可执行,且版本兼容(老项目可能依赖pkg-config )











