文件在没有头文件的情况下运行
File runs without header file present
- 删除 Ubuntu 中的包是否也会删除关联的头文件?
- 手动安装包和使用 apt 命令安装包有区别吗?
- 如何找到特定头文件所需的正确包名称?
- 为什么在头文件不存在时运行下面提到的代码?
详情:
我使用以下方法安装了 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 不存在。
Does deleting a package in Ubuntu delete the associated header files too?
卸载软件包会删除属于该软件包的所有文件。如果它是一个 -dev
包,通常会有 header 个文件作为包的一部分。另一方面,如果您安装了 libfoo
软件包以及 libfoo-dev
,并且您只卸载了 libfoo
,则 libfoo-dev
软件包可能会保留在您的系统中,并且它,header 个文件。
Is there a difference between installing packages manually and using the apt command?
当然可以。手动安装文件只是意味着您将一些文件放在系统的某个位置。如果你安装了一个包,你的包管理器会跟踪安装了什么。这对于正确的 clean-up 等是必要的。此外,包的配置使得库和 headers 最终分别位于通常由链接器和编译器找到的路径下。您也可以手动执行此操作,但它容易出错 - 更重要的是,弄乱包管理器的标准安装路径(例如,手动将一些文件放入 apt
写入自身的目录中)可能会危及部分你的系统。
How to find the right package name required for particular header-file?
我不知道有哪个包可以将单个 header 字段拆分到多个包中。如果您对 foo
的 header 感兴趣,请检查 apt-cache search foo
是否会生成 -dev
包。这应该足够了。
Why does the code mentioned below runs when the header file is not present?
如果编译器在其搜索路径中找不到某个 #include
d 文件,它会立即报错。因此,文件 存在 。如果您卸载了提供特定 header 的软件包,那么剩余的手动安装必须仍然存在。正如您所说,您手动安装 headers 和 apt
,我怀疑编译器仍然可以看到手动安装。
- 删除 Ubuntu 中的包是否也会删除关联的头文件?
- 手动安装包和使用 apt 命令安装包有区别吗?
- 如何找到特定头文件所需的正确包名称?
- 为什么在头文件不存在时运行下面提到的代码?
详情:
我使用以下方法安装了 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 不存在。
Does deleting a package in Ubuntu delete the associated header files too?
卸载软件包会删除属于该软件包的所有文件。如果它是一个 -dev
包,通常会有 header 个文件作为包的一部分。另一方面,如果您安装了 libfoo
软件包以及 libfoo-dev
,并且您只卸载了 libfoo
,则 libfoo-dev
软件包可能会保留在您的系统中,并且它,header 个文件。
Is there a difference between installing packages manually and using the apt command?
当然可以。手动安装文件只是意味着您将一些文件放在系统的某个位置。如果你安装了一个包,你的包管理器会跟踪安装了什么。这对于正确的 clean-up 等是必要的。此外,包的配置使得库和 headers 最终分别位于通常由链接器和编译器找到的路径下。您也可以手动执行此操作,但它容易出错 - 更重要的是,弄乱包管理器的标准安装路径(例如,手动将一些文件放入 apt
写入自身的目录中)可能会危及部分你的系统。
How to find the right package name required for particular header-file?
我不知道有哪个包可以将单个 header 字段拆分到多个包中。如果您对 foo
的 header 感兴趣,请检查 apt-cache search foo
是否会生成 -dev
包。这应该足够了。
Why does the code mentioned below runs when the header file is not present?
如果编译器在其搜索路径中找不到某个 #include
d 文件,它会立即报错。因此,文件 存在 。如果您卸载了提供特定 header 的软件包,那么剩余的手动安装必须仍然存在。正如您所说,您手动安装 headers 和 apt
,我怀疑编译器仍然可以看到手动安装。