Debian Stretch编译gobject-introspection-1.70.0报错问题求助
问题根因
Debian Stretch 系统自带的 glib 库默认将核心库文件安装到 /lib/x86_64-linux-gnu 路径下,该路径在 Linux 动态链接器的搜索优先级高于你编译安装新版 glib 所用的 /usr/lib/x86_64-linux-gnu 路径。即便 pkg-config 配置已经指向 2.70.0 版本的 glib,程序运行时仍会优先加载 /lib 路径下不含 g_date_copy 符号的旧版 glib,最终触发未定义符号报错。
解决方法
方法一:清理旧版冗余库(适合个人开发环境,确认无其他程序依赖旧版 glib 时使用)
- 先备份旧版库文件防止系统异常:
sudo cp /lib/x86_64-linux-gnu/libglib-2.0.so.0 /lib/x86_64-linux-gnu/libglib-2.0.so.0.bak sudo cp /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.3 /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.3.bak
- 删除
/lib路径下的旧版 glib 库文件:
sudo rm /lib/x86_64-linux-gnu/libglib-2.0.so.0 /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.3
- 刷新动态库缓存:
sudo ldconfig
- 重新编译 gobject-introspection 即可正常通过。
方法二:调整动态库搜索优先级(更稳妥,兼容依赖旧版 glib 的系统程序)
- 将新版 glib 所在的
/usr/lib/x86_64-linux-gnu路径加到动态库搜索规则的最优先级:
echo "/usr/lib/x86_64-linux-gnu" | sudo tee /etc/ld.so.conf.d/00-user-lib.conf
- 刷新动态库缓存:
sudo ldconfig
- 验证动态链接是否正确:执行
ldd /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0确认其依赖的libglib-2.0.so.0指向/usr/lib/x86_64-linux-gnu下的新版文件,再重新编译即可。
内容的提问来源于stack exchange,提问作者blackfilms
相关产品推荐
相关产品推荐

