Meson 无法正确编译代码,如何修复?

问题描述

我正在尝试从 Github 的源代码而不是发行版编译这个名为 ahowviewer 的程序。问题与两个依赖项 libunrar 和 libnsgif 有关。对于 libunrar,我需要一个 .pc 文件,以便编译器找到它。每当我生成文件时,它都会在最后以错误消息 src/meson.build:98:5: ERROR: UnkNown variable "libunrar_dll_hpp". 终止编译,并且没有其他帮助我调试的东西。但是,当我删除它时,它会检测到 dll.hpp 文件和库,但不会检测到运行时依赖项。它与被赋值的变量有关,这取决于 if 语句。除了这些,其他的就不知道了。

一个问题是,当我删除 .pc 文件,cd 进入 build 并运行 ninja 时,会弹出此错误消息

./src/archive/../image.h:8:10: Fatal error: libnsgif.h: No such file or directory 8 | #include <libnsgif.h> | ^~~~~~~~~~~~ compilation terminated."

What's my problem here?

解决方法

根据这个meson.build's snippet,这个项目可以使用自己的“外部”版本的 libnsgif(看起来它是首选方式?)。所以,在你卸载包(purge)之后找不到这个依赖,只需要重新配置构建目录即可:

$ meson --reconfigure build_dir/

使用 libunrar,您还有另一个问题。它是一个非免费包,不提供 .pc 文件(.pc,又名包配置文件不是用于编译器的,简而言之,它是一个键/值格式的文本文件,它告诉我们库、头文件的位置)。您不应该自己为它创建 .pc 文件,因为该项目不希望找到它!如果您需要它 - 介子应该能够找到库(如果它不能 - 这是另一个问题),但由于它不是必需的,因此可以在没有它的情况下配置该项目(检查 options):

$ meson configure build_dir/ -Dlibunrar=false