文件运行时不存在头文件


  1. 在Ubuntu中删除包是否也会删除相关的头文件
  2. 手动安装软件包和使用apt命令有区别吗
  3. 如何找到特定头文件所需的正确包名称
  4. 为什么下面提到的代码在头文件不存在的情况下运行

详细信息:

我使用以下方式安装LIBABW:sudo apt-get install libabw-dev,也可以手动使用前面的tar.gz包。

我编写了一个简单的C++代码,使用libabw从Abiword文件中提取数据。代码中包含的头文件是

#include <stdio.h>
#include <string>
#include <cstring>
#include <librevenge-generators/librevenge-generators.h>
#include <librevenge-stream/librevenge-stream.h>
#include <libabw/libabw.h>

这是我运行的编译代码的命令:

g++ libabw.cc -I/usr/local/include/librevenge-0.0 -I/usr/local/include/libabw-0.1 -I/usr/local/include/librevenge-0.0 -I/usr/include/libxml2 -L/usr/local/lib -lrevenge-generators-0.0 -labw-0.1 -lrevenge-0.0 -lrevenge-stream-0.0

现在,我从提取的文件夹中手动删除了libabw-dev包,并使用

sudo apt-get purge --auto-remove libabw-dev

我编写的代码仍然可以编译并从Abiword文档中提取数据。

在运行apt-file -x search '/libabw/libabw.h$'时,我得到了输出libabw-dev: /usr/include/libabw-0.1/libabw/libabw.h。但是目录/usr/include/libabw-0.1不存在。

在Ubuntu中删除包也会删除相关的头文件吗?

卸载程序包会删除属于此程序包的所有文件。如果是-dev包,则通常会有头文件作为包的一部分。另一方面,如果安装了libfoo软件包和libfoo-dev,并且仅卸载了libfoo,则libfoo-dev软件包可能会保留在系统中,并保留头文件。

手动安装软件包和使用apt命令有区别吗?

当然。手动安装文件只意味着将一些文件放在系统中的某个位置。如果安装软件包,软件包管理器会跟踪安装位置。这对于正确的清理等是必要的。此外,包的配置使库和头分别位于通常由链接器和编译器找到的路径下。您也可以手动执行,但这很容易出错,更重要的是,打乱包管理器的标准安装路径(例如,手动将一些文件放在apt自己写入的目录中(可能会危及系统的某些部分。

如何找到特定头文件所需的正确包名?

我不知道有哪个包可以在包之间拆分单个标头字段。如果您对foo的标头感兴趣,请检查apt-cache search foo是否生成-dev包。这就足够了。

为什么在头文件不存在的情况下运行下面提到的代码?

如果编译器在其搜索路径中找不到#included文件,它将立即抱怨。因此,文件存在。如果您已经卸载了提供特定标头的程序包,那么剩余的手动安装必须仍然存在。正如您所说的,您手动和使用apt安装了头文件,我怀疑编译器仍然可以看到手动安装。

相关内容

最新更新