Como posso consertar a localização do polkit e glib incluir cabeçalhos?

1

Estou desenvolvendo um aplicativo no qual preciso usar o PolicyKit e parece que o PolicyKit usa bibliotecas do Glib. O que acontece é que eu instalei o PolicyKit, mas a localização dos cabeçalhos está em /usr/include/polkit-1/ e /usr/include/glib-2.0 .

e os cabeçalhos têm em seus locais internos como %código%, %código%, /usr/include/ .

Não consigo compilar porque o compilador não encontra os cabeçalhos no local que os cabeçalhos dizem que devem ser. Eu tentei modificar cada cabeçalho individualmente, mas está demorando muito e não sei quando serei feito.

O problema aqui é que, quando instalados, eles são instalados em /usr/include/polkit e /usr/include/gobject quando devem ser instalados apenas em /usr/include/polkit-1 . Em outras palavras, a pasta /usr/include/glib-2.0 e /usr/include não deveria estar lá. Alguém sabe de alguma forma para corrigir isso rapidamente, colocando os arquivos e pastas em seus respectivos locais?

    
por Agnes 16.05.2012 / 21:33

3 respostas

2

Eu não sei os detalhes, mas alguns pacotes e bibliotecas instalam seus arquivos dessa forma e também instalam arquivos com seus caminhos para que você possa usar pkg-config para encontrar os caminhos corretos.

Eu não tenho polkit , mas aqui, para glib-2.0 , eu posso pedir a pkg-config para me dar os "cflags" para usar e compilar com a biblioteca glib-2.0 ("cflags" sendo flags para use com o compilador C, para especificar caminhos de inclusão e bibliotecas para adicionar ao vincular):

$ pkg-config --cflags --libs glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  -lglib-2.0

Eu acho que, para polkit-1 , você faria     $ pkg-config --cflags --libs glib-2.0 polkit-1

Para compilar com esses parâmetros, armazene-os em variáveis em um makefile, copie seu resultado ou você pode até mesmo chamar pkg-config diretamente no shell - como no exemplo a seguir da página do manual:

cc program.c $(pkg-config --cflags --libs gnomeui)

(Na verdade, esse exemplo é uma regra Makefile , mas você também pode fazê-lo no shell.)

Para alguns detalhes, consulte a página do manual e verifique quais arquivos .pc estão disponíveis em /usr/lib/pkgconfig , /usr/share/pkgconfig e suas contrapartes /usr/local .

AFAIK, esta é a maneira portátil de compilar bibliotecas externas.

    
por 16.05.2012 / 21:56
0

Concordo com o comentário do Giles e acho que o pkg_command do njsg é ótimo.

Outra estratégia comum para ativar o editor de links, ld, localizar arquivos de biblioteca é adicionar seus diretórios à variável de ambiente LD_LIBRARY_PATH da página de manual ld

de man ld

     The linker uses the following search paths to locate required
       shared libraries:

       1.  Any directories specified by -rpath-link options.

       2.  Any directories specified by -rpath options.  The difference
           between -rpath and -rpath-link is that directories specified by
           -rpath options are included in the executable and used at
           runtime, whereas the -rpath-link option is only effective at
           link time. Searching -rpath in this way is only supported by
           native linkers and cross linkers which have been configured
           with the --with-sysroot option.

       3.  On an ELF system, for native linkers, if the -rpath and
           -rpath-link options were not used, search the contents of the
           environment variable "LD_RUN_PATH".

       4.  On SunOS, if the -rpath option was not used, search any
           directories specified using -L options.

       5.  For a native linker, the search the contents of the environment
           variable "LD_LIBRARY_PATH".

Leia a página do manual para mais opções.

Não reorganize os pacotes.

    
por 17.05.2012 / 02:48
-1

Obrigado. Eu consertei isso fazendo isso:

sudo cp -r /usr/include/polkit-1/polkit /usr/include/polkit
sudo cp -r /usr/include/polkit-1/polkitagent /usr/include/polkitagent
sudo cp -r /usr/include/polkit-1/polkitbackend /usr/include/polkitbackend
sudo cp -r /usr/include/glib-2.0/gio /usr/include/gio
sudo cp -r /usr/include/glib-2.0/glib /usr/include/glib
sudo cp -r /usr/include/glib-2.0/gobject /usr/include/gobject
sudo cp -r /usr/include/glib-2.0/glib-object.h /usr/include/glib-object.h
sudo cp -r /usr/include/glib-2.0/glib-unix.h /usr/include/glib-unix.h
sudo cp -r /usr/include/glib-2.0/glib.h /usr/include/glib.h
sudo cp -r /usr/include/glib-2.0/gmodule.h /usr/include/gmodule.h

Se alguém tiver o mesmo problema e usar isso, não é necessário excluir a pasta glib-2.0 , porque ela ainda será usada.

De qualquer forma, agora estou perdendo glibconfig.h e seu lugar no sistema. Eu não sei o que instalar para obtê-lo.

    
por 16.05.2012 / 22:41