升级Ubuntu 20.04到21.04后PSPP新旧版本源码均无法编译问题问询
Ubuntu 20.04升级至21.04后PSPP源码编译链接错误解决方案
错误特征
编译PSPP源码时触发如下链接错误:
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_uri_split_network' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_uri_is_valid' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_memdup2' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_uri_join' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_uri_split_with_user' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_spawn_async_with_pipes_and_fds' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined reference to `g_file_set_contents_full'
根因说明
上述报错中出现的未定义符号均为GLib 2.67及以上版本新增的API。Ubuntu 21.04自带的libgio-2.0库已经升级到依赖这些新API的版本,编译PSPP时触发该错误的核心原因是构建系统的依赖匹配异常:要么是系统中残留了旧版本的GLib开发文件,构建时读取了不包含新API声明的旧头文件;要么是PSPP的构建脚本未正确引入对应版本GLib核心库的链接参数。
解决步骤
- 第一步:清理PSPP源码目录的旧编译缓存,避免旧配置残留影响
make distclean # 如上述命令执行失败,可直接删除整个源码目录后重新解压源码包 - 第二步:修复系统GLib依赖,确保所有GLib相关开发包版本与21.04官方源版本一致
执行完成后可运行以下命令验证GLib版本,21.04环境下正常应返回2.68.x的版本号:sudo apt update && sudo apt install --reinstall libglib2.0-dev libgio2.0-devpkg-config --modversion glib-2.0 - 第三步:重新执行configure配置,强制传入正确的GLib编译链接参数,避免构建脚本检测异常
./configure GLIB_CFLAGS="$(pkg-config --cflags glib-2.0 gio-2.0)" GLIB_LIBS="$(pkg-config --libs glib-2.0 gio-2.0)" - 第四步:正常执行编译即可
make -j$(nproc)
内容的提问来源于stack exchange,提问作者Estatistics
相关产品推荐
相关产品推荐

