细节:
我使用:安装了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
包。这样就足够了。
当头文件不存在时,为什么下面提到的代码可以运行?
如果编译器#include
在其搜索路径中某处找不到d文件,则会立即抱怨。因此,该文件是本。如果您已卸载提供了特定标头的软件包,则其余的手动安装必须仍然存在。正如您说的那样,您既通过手动方式也通过方式安装了标头apt
,我怀疑手动安装对于编译器仍然可见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句