Por que os arquivos 'libgnomevfs' estão em /usr/include/gnome-vfs-2.0?

3

A maioria dos aplicativos, incluindo os próprios cabeçalhos gnomevfs, espera que os arquivos estejam em /usr/include/libgnomevfs , mas o Ubuntu os tem sob /usr/include/gnome-vfs-2.0/libgnomevfs .

Por quê? O pacote a que me refiro chama-se libgnomevfs2 .

Dentro de /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs.h 'encontramos:

#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>
...

Isso significa que até os próprios cabeçalhos esperam que os arquivos estejam nesse local - e nada que inclua esse arquivo funcionará.

Estou faltando alguma coisa, ou isso é uma falha?

    
por Nathan Osman 02.10.2010 / 20:27

2 respostas

3

O pacote é instalado em /usr/include/gnome-vfs-2.0 para que possa coexistir com outras versões do gnome-vfs (por exemplo, imagine também ter /usr/include/gnome-vfs-1.0 disponível). Quando um pacote precisa ser construído em uma versão do gnome-vfs, ele deve consultar pkg-config para encontrar o local da instalação. (Isso normalmente é feito durante configure para o software a ser compilado.) Por exemplo:

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  

Observe o uso de todos os sinalizadores -I , incluindo -I/usr/include/gnome-vfs-2.0 . A saída da chamada pkg-config --cflags normalmente seria adicionada à variável de ambiente CFLAGS da construção. Dada a parte -I , o compilador poderá encontrar o caminho completo para os cabeçalhos, já que ele começará a procurar /usr/include/gnome-vfs-2.0 e, em seguida, colocará o caminho do cabeçalho libgnomevfs/gnome-vfs-acl.h , o que resolverá o caminho correto do arquivo: /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-acl.h .

Portanto, se o software ainda não usa pkg-config , você pode tentar passar as variáveis ( cflags e libs ) para a configure call:

CFLAGS='pkg-config --cflags gnome-vfs-2.0' LDFLAGS='pkg-config --libs gnome-vfs-2.0' ./configure
    
por Kees Cook 31.10.2010 / 18:12
2

As aplicações não devem esperar que os cabeçalhos e libs estejam em um diretório fixo, mas use pkg-config para obter os parâmetros necessários, por exemplo: pkg-config --cflags gnome-vfs-2.0

    
por Florian Diesch 02.10.2010 / 20:56