大多数应用程序(包括 gnomevfs 标头本身)都希望文件位于 下/usr/include/libgnomevfs
,但Ubuntu 下有它们/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
,您可以尝试将变量(cflags
和libs
)传递到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