Como manejo um erro “Não existe esse arquivo ou diretório” para um arquivo de cabeçalho do make?

1

Ao compilar um pacote fonte, recebi um erro de make que parecia:

In file included from foo.c:28:0:
bar.h:23:18: fatal error: bar.h: No such file or directory
 #include <bar.h>    
               ^
compilation terminated.
make[x]: *** [baz] Error 1
make[x]: Leaving directory 

Como faço para lidar com isso?

    
por muru 04.03.2015 / 23:29

1 resposta

1

Isso geralmente indica que você não instalou alguma dependência do programa que está tentando compilar. Dependendo do arquivo de cabeçalho em questão e do programa que você está tentando compilar, você tem algumas opções:

O software alvo existe nos repositórios do Ubuntu

Às vezes você quer compilar a partir do código-fonte um pacote já fornecido pelo Ubuntu (para obter uma versão diferente, talvez, ou para corrigi-lo). Se o software não mudou muito, você pode usar apt para obter as dependências:

sudo apt-get build-dep <package-name>

Isso deve instalar todos os pacotes necessários para compilar o pacote Ubuntu desse software (que pode ter menos ou mais pacotes do que o pacote de origem realmente precisa).

Se você precisar fazer apenas algumas pequenas alterações na fonte ou aplicar um patch, poderá até mesmo economizar um pouco de esforço, permitindo que apt e dpkg façam o trabalho pesado:

sudo apt-get build-dep <package-name>
apt-get source <package-name>

Isso fará o download dos arquivos de origem do pacote, incluindo tudo o que for necessário para criar um pacote dele. Os arquivos estarão em um diretório chamado <package-name>-<some-version> . Insira, faça todas as alterações desejadas e faça:

sudo dpkg-buildpackage -b -us -uc

Isso cria pacotes binários não assinados no diretório pai ( cd .. ). Você pode usar dpkg para instalar esses pacotes:

sudo dpkg -i  <package-name>_<some-version>_<architecture>.deb

Exemplos:

  1. Alterando uma opção de compilação em um pacote
  2. Não é possível editar plugins / sudoers / ins _ *. h

O software alvo não está presente nos repositórios do Ubuntu

Você ainda pode tentar a sua sorte com o arquivo de cabeçalho específico faltando. Use o índice Ubuntu Packages (a opção para pesquisar o conteúdo dos pacotes) ou apt-file para procurar o arquivo. Às vezes, vários pacotes podem fornecer arquivos com nomes semelhantes e, nesse caso, preferir:

  1. Arquivos em /usr/include .
  2. Pacotes da sua arquitetura (use uname -m para saber qual é a sua arquitetura).
  3. Qualquer versão específica da qual o seu software dependa (como o Qt4 em vez do Qt5) - verifique os arquivos README e INSTALL na origem (se houver).
  4. Pacotes cujos nomes terminam em -dev , que normalmente incluem cabeçalhos necessários para compilação.

Veja: Como eu encontro o pacote que fornece um arquivo?

    
por muru 04.03.2015 / 23:29