Arquivos de biblioteca geralmente são prefixados com lib
; Seu comando locate
pode ter sido mais bem-sucedido se você fosse menos específico: locate "*log4cpp*"
.
Com relação às bibliotecas compartilhadas (isto é, .so
files - normalmente, mas não necessariamente, o caso; consulte "O que é uma pasta da biblioteca?" abaixo) whereis
normalmente encontrará o caminho apropriado, mas não suporta globbing, então você teria que ter o nome correto, sem sufixo ( whereis liblog4cpp
). ldconfig -p
é ainda melhor, porque você está obtendo as informações diretamente da boca do cavalo ( ldconfig
configura o cache usado pelo vinculador, que gerencia as bibliotecas compartilhadas).
ldconfig -p | grep log4cpp
Note que, para construir na biblioteca, você também precisa do cabeçalho de inclusão relevante, que provavelmente não é instalado por padrão pela distro; aqueles vêm em pacotes -dev
ou -devel
separados.
O que é um diretório de inclusão?
Um diretório de inclusão contém arquivos de cabeçalho C e C ++ usados dessa maneira no código-fonte:
#include <foobar.h>
#include <foo/bar.h>
Eles são organizados em hierarquias, algumas das quais são estipuladas por padrões de linguagem (C / C ++). No entanto, o caminho para o topo da hierarquia é específico para o sistema e conhecido pelo compilador / pré-processador. Por exemplo, esses dois arquivos podem ser encontrados em /usr/include/foobar.h
e /usr/include/foo/bar.h
.
Os sistemas Linux geralmente possuem dois diretórios include de nível superior em reprodução, /usr/include
e /usr/local/include
(o último tem precedência).
Os arquivos de inclusão não são necessários para o software compilado, apenas para criá-los, e é por isso que instalar o libfoobar
de um pacote de distribuição irá obter libfoobar.so
mas não foobar.h
. Isso está no pacote libfoobar-dev
(as convenções de nomenclatura do nb variam um pouco nas distribuições).
O que é um diretório de biblioteca?
Um diretório de bibliotecas contém bibliotecas de dois formulários, dinâmico (também conhecido como compartilhado) e estático. A maioria deles é o primeiro. Eles correspondem aproximadamente para incluir diretórios, mas geralmente há mais deles ( /lib
, /lib64
, /usr/lib
, /usr/local/lib
, etc .; alguns deles podem ser links simbólicos para outros).
Uma biblioteca compartilhada é aquela que é usada em tempo de execução; Se um executável vincula a uma biblioteca compartilhada, (partes de) ambos são carregados na memória conforme necessário para que o programa seja executado. Se algo já estiver usando a biblioteca, ela já estará na memória e não precisará ser carregada novamente; os dois aplicativos não interferirão entre si, pois a parte compartilhada é somente leitura para eles. Bibliotecas compartilhadas por convenção usam o sufixo .so
.
Uma biblioteca estática é construída em um executável em tempo de compilação e não é necessário executar o executável posteriormente. Isso é menos comum porque a biblioteca não pode ser compartilhada com outros aplicativos, o que potencialmente desperdiça uma quantidade considerável de RAM. Bibliotecas estáticas por convenção usam o sufixo .a
.
O que é um diretório binário?
Um diretório binário contém arquivos de programas executáveis, como ls
ou firefox
. Executáveis no mundo * nix não usam sufixos. Esses diretórios geralmente estão na variável $PATH
, caso contrário você teria que digitar /usr/bin/ls
o tempo todo. Qual executável será usado quando você digitar ls
pode ser determinado com o comando whereis
ou which
.
Se .configure
permitir que você especifique uma biblioteca ou um diretório de inclusão, você normalmente só precisa fazê-lo se estiver em um local não padrão. Experimente sem e se não estiver encontrado e use a opção --with-inc=
.