Ubuntu 20.04: harfbuzz version too old解决方法

在Ubuntu 20.04上安装Ao时遇到错误,由于harfbuzz库版本过高导致。解决方法是降级Ao依赖的库,如libpango-1.0-0等,通过下载旧版本库文件,解压并替换到软件根目录,再检查依赖路径,确保使用的是低版本库。

参考链接:unix.stackexchange.com

现象

在ubuntu20.04上安装了Ao(可以看做Microsoft todo的linux版),从终端启动时报错:
Failed to load module "canberra-gtk-module"Pango-ERROR **: 00:56:03.195: Harfbuzz version too old (1.4.2)

解决

第一个很好解决,直接sudo apt-get install libcanberra-gtk-module完事儿。
第二个,百度了一下发现是因为Pango库的原因(Pango是一个文本布局引擎库,可与HarfBuzz整形引擎一起使用,以显示多语言文本),Pango的版本太新,Harfbuzz没有相应版本。
首先看一下可能导致错误的依赖项:

$ ldd ao-app | grep pango
libpangocairo-1.0.so.0 => /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 
<think>我们正在解决Ubuntu系统上安装harfbuzz的问题。根据之前的错误信息,可能是由于系统自带的harfbuzz版本过低(如1.4.2)导致某些软件(如Ao)无法运行。因此,我们需要安装更新版本的harfbuzz。 安装方法有两种: 1. 使用Ubuntu官方仓库更新(但可能版本不够新) 2. 手动编译安装最新版本(推荐,因为可以获取最新版本) 由于用户遇到的问题提示版本过旧,我们选择手动编译安装。 步骤: 1. 安装依赖 2. 下载harfbuzz源码 3. 编译并安装 注意:手动安装通常会将库安装在`/usr/local`目录下,这可能会覆盖系统自带的版本,或者与系统自带的版本共存。如果出现冲突,可能需要调整动态链接库的路径。 另外,根据引用[4]中提到的boost库安装,我们可以参考类似的编译安装步骤。 具体步骤: ### 步骤1:安装依赖 在编译harfbuzz之前,需要安装一些依赖库和工具: ```bash sudo apt update sudo apt install -y build-essential git meson pkg-config \ libfreetype6-dev libglib2.0-dev libcairo2-dev \ libicu-dev libgirepository1.0-dev gobject-introspection ``` ### 步骤2:下载源码 从harfbuzz的官方GitHub仓库克隆最新源码: ```bash git clone https://github.com/harfbuzz/harfbuzz.git cd harfbuzz ``` ### 步骤3:编译和安装 使用meson构建系统进行编译和安装: ```bash meson build --prefix=/usr/local ninja -C build sudo ninja -C build install ``` ### 步骤4:更新动态链接库缓存 安装完成后,更新动态链接库缓存,确保系统能够找到新安装的库: ```bash sudo ldconfig ``` ### 验证安装 安装完成后,可以通过以下命令检查版本: ```bash pkg-config --modversion harfbuzz ``` 如果显示版本号(例如3.0.0或更高),则表示安装成功。 ### 注意事项 - 如果系统中已有旧版本的harfbuzz,可能需要卸载旧版本(但需谨慎,因为系统组件可能依赖旧版本)。或者,我们可以将新版本安装到独立目录(如`/opt/harfbuzz`),然后通过设置`PKG_CONFIG_PATH`和`LD_LIBRARY_PATH`来使用新版本。 - 如果选择独立目录安装,可以在meson配置时指定: ```bash meson build --prefix=/opt/harfbuzz ``` 然后,在运行依赖harfbuzz的程序前,设置环境变量: ```bash export PKG_CONFIG_PATH=/opt/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH export LD_LIBRARY_PATH=/opt/harfbuzz/lib:$LD_LIBRARY_PATH ``` ### 卸载方法 如果是从源码安装,可以使用以下命令卸载(在构建目录中): ```bash sudo ninja -C build uninstall ``` ### 替代方案:使用PPA(如果可用) 如果有第三方PPA提供了新版本的harfbuzz,也可以使用PPA安装。但需要注意PPA的可靠性。 例如,可以尝试搜索是否有harfbuzz的PPA: ```bash sudo add-apt-repository ppa:some-ppa/for-harfbuzz sudo apt update sudo apt install libharfbuzz-dev ``` 但由于PPA的不确定性,我们更推荐源码编译安装。 ### 相关问题 1. 如何解决安装harfbuzz后与其他库的兼容性问题? 2.Ubuntu上如何安装特定版本的harfbuzz? 3. 如何完全卸载手动编译安装的harfbuzz? 4. 在Docker容器中安装harfbuzz的注意事项有哪些? 以上步骤应该能够解决harfbuzz版本过旧的问题。如果遇到其他错误,请根据具体错误信息进行排查。 [^1]: Ubuntu 20.04: harfbuzz version too old解决方法 [^2]: harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用? [^3]: harfbuzz安装位置 linux_电脑的基础认识(系统安装篇三) [^4]: harfbuzz安装位置 linux_Linux:编译安装boost 1.69库 </think>### Ubuntu系统安装Harfbuzz的完整指南 Harfbuzz是开源的文字塑形引擎,用于处理复杂文字布局(如阿拉伯语、印地语等排版)。在Ubuntu系统中安装最新版本Harfbuzz解决软件兼容性问题[^1]。 #### 方法1:通过APT安装(推荐常规用户) ```bash # 更新软件源 sudo apt update # 安装主程序包和开发文件 sudo apt install -y libharfbuzz-dev libharfbuzz0b libharfbuzz-gobject0 # 验证安装 pkg-config --modversion harfbuzz ``` **优点**: - 自动处理依赖(包括Freetype、GLib等) - 系统级集成 - 版本兼容性好 **输出示例**: ``` 3.8.0 # Ubuntu 22.04默认版本 ``` #### 方法2:源码编译安装(需要最新版本时) ```bash # 安装编译依赖 sudo apt install -y build-essential meson ninja-build pkg-config \ libfreetype6-dev libglib2.0-dev libcairo2-dev \ libicu-dev libgirepository1.0-dev # 下载源码 git clone https://github.com/harfbuzz/harfbuzz.git cd harfbuzz # 配置编译选项 meson build --prefix=/usr/local \ -Dcairo=enabled \ -Dicu_builtin=false \ -Dtests=disabled # 编译并安装 ninja -C build sudo ninja -C build install # 更新动态库缓存 sudo ldconfig ``` **验证安装**: ```bash harf-view /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf "Hello العالم" ``` 成功后会显示文字渲染预览窗口 #### 安装位置说明 | 文件类型 | 路径 | 说明 | |----------|------|------| | 库文件 | `/usr/lib/x86_64-linux-gnu/libharfbuzz.so*` | 动态链接库 | | 头文件 | `/usr/include/harfbuzz/` | 开发头文件 | | 配置文件 | `/usr/share/pkgconfig/harfbuzz.pc` | pkg-config配置 | | 帮助文档 | `/usr/share/doc/libharfbuzz-dev/` | API文档 | #### 故障排除 **问题1**:`GLib version too old` ```bash # 升级GLib sudo apt install -y libglib2.0-dev=2.72.4-0ubuntu1 ``` **问题2**:`Freetype not found` ```bash # 修复Freetype依赖 sudo apt install -y libfreetype6-dev export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig ``` **问题3**:版本冲突 ```bash # 查看已安装版本 apt list --installed | grep harfbuzz # 完全卸载旧版本 sudo apt purge -y libharfbuzz* ``` #### 整合示例(Python脚本使用) ```python import harfbuzz as hb # 创建字体对象 font = hb.Font.create("DejaVuSans.ttf") # 文字塑形 buffer = hb.Buffer.create() buffer.add_str("مرحبا بالعالم") # 阿拉伯语 hb.shape(font, buffer) # 获取字形信息 glyphs = buffer.get_glyph_infos() positions = buffer.get_glyph_positions() ``` #### 相关开发库依赖关系 $$ \begin{array}{c} \text{Harfbuzz} \\ \downarrow \\ \text{Freetype} \quad \text{GLib} \\ \downarrow \quad \downarrow \\ \text{LibPNG} \quad \text{PCRE} \\ \end{array} $$ ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值