为什么“libgnomevfs”文件位于 /usr/include/gnome-vfs-2.0 下?

为什么“libgnomevfs”文件位于 /usr/include/gnome-vfs-2.0 下?

大多数应用程序(包括 gnomevfs 标头本身)都希望文件位于 下/usr/include/libgnomevfsUbuntu 下有它们/usr/include/gnome-vfs-2.0/libgnomevfs

为什么?我指的是这个包libgnomevfs2

在 /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs.h` 中我们发现:

#include <libgnomevfs/gnome-vfs-acl.h>
#include <libgnomevfs/gnome-vfs-address.h>
#include <libgnomevfs/gnome-vfs-async-ops.h>
#include <libgnomevfs/gnome-vfs-cancellation.h>
...

这意味着即使标题本身也期望文件位于该位置 - 并且包含该文件的任何内容都无法工作。

我是不是遗漏了什么,或者这是一个故障?

答案1

安装软件包是/usr/include/gnome-vfs-2.0为了使其能够与其他版本的 gnome-vfs 共存(例如,想象一下也有/usr/include/gnome-vfs-1.0可用的)。当软件包需要针对 gnome-vfs 版本进行构建时,它应该查询以找到安装位置。(这通常在要编译的软件pkg-config期间完成。)例如:configure

pkg-config --cflags gnome-vfs-2.0
-pthread -DORBIT2=1 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  

请注意所有标志的使用-I,包括-I/usr/include/gnome-vfs-2.0。调用的输出pkg-config --cflags通常会添加到CFLAGS构建的环境变量中。给定-I部分,编译器将能够找到标头的完整路径,因为它将开始查找/usr/include/gnome-vfs-2.0然后添加标头路径libgnomevfs/gnome-vfs-acl.h,这将解析正确的完整文件路径:/usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-acl.h

因此,如果软件尚未使用pkg-config,您可以尝试将变量(cflagslibs)传递到configure调用中:

CFLAGS=`pkg-config --cflags gnome-vfs-2.0` LDFLAGS=`pkg-config --libs gnome-vfs-2.0` ./configure

答案2

应用程序不应该期望头文件和库位于固定目录中,而是使用pkg 配置获取所需的参数,例如:pkg-config --cflags gnome-vfs-2.0

相关内容