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

C++ 文件在不存在头文件的情况下运行 在Ubuntu中删除包是否也会删除相关的头文件 手动安装软件包和使用apt命令之间有区别吗 如何找到特定头文件所需的正确包名 为什么下面提到的代码在头文件不存在时运行,c++,ubuntu,shared-libraries,header-files,C++,Ubuntu,Shared Libraries,Header Files,详细信息: 我使用以下方式安装了LIBABW: sudo apt get install libabw dev,并在前面手动使用tar.gz包 我编写了一个简单的C++代码,用LabBAW从ABIWORD文件中提取数据。 代码中包含的头文件是 #include <stdio.h> #include <string> #include <cstring> #include <librevenge-generators/librevenge-generat

详细信息:

我使用以下方式安装了LIBABW:
sudo apt get install libabw dev
,并在前面手动使用tar.gz包

我编写了一个简单的C++代码,用LabBAW从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/libevenge-0.0-I/usr/local/include/libabw-0.1-I/usr/local/include/libevenge-0.0-I/usr/include/libxml2-L/usr/local/lib-lrevenge-generators-0.0-labw-0.1-lrevengge-stream-0.0

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

sudo apt get purge--自动删除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
包。这应该足够了

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


如果编译器在其搜索路径中的某个地方没有找到
#include
d文件,它将立即进行投诉。因此,文件存在。如果已卸载交付特定标头的包,则剩余的手动安装必须仍然存在。正如您所说,您手动安装了头文件,并且使用了
apt
,我怀疑编译器仍然可以看到手动安装。

运行程序不需要任何头文件。编译程序可能需要标题。感谢您提供详细的答案。这为我澄清了很多事情。