web-dev-qa-db-fra.com

Comment gérer une erreur "Aucun fichier ou répertoire de ce type" pour un fichier d'en-tête de make?

Lors de la compilation d'un paquet source, une erreur de make ressemblait à ceci:

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 

Comment puis-je gérer cela?

1
muru

Cela indique généralement que vous n'avez pas installé une dépendance du programme que vous essayez de compiler. En fonction du fichier d'en-tête en question et du programme que vous essayez de compiler, vous avez plusieurs options:

Le logiciel cible existe dans les dépôts Ubuntu

Parfois, vous souhaitez compiler à partir du code source un paquet déjà fourni par Ubuntu (pour obtenir une version différente, par exemple, ou pour le corriger). Si le logiciel n'a pas trop changé, vous pouvez utiliser apt pour obtenir les dépendances:

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

Cela devrait installer tous les paquets nécessaires à la création du paquet Ubuntu de ce logiciel (qui peut contenir moins de paquets ou plus que ce dont votre paquet source a réellement besoin).

Si vous ne devez apporter que des modifications mineures dans la source ou appliquer un correctif, vous pourrez peut-être économiser beaucoup d'effort en laissant apt et dpkg faire les démarches nécessaires:

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

Cela téléchargera les fichiers source du paquet, y compris tout le nécessaire pour en faire un paquet. Les fichiers seront dans un répertoire nommé <package-name>-<some-version>. Entrez-le, effectuez toutes les modifications souhaitées, puis procédez comme suit:

Sudo dpkg-buildpackage -b -us -uc

Cela crée des packages binaires non signés dans le répertoire parent (cd ..). Vous pouvez ensuite utiliser dpkg pour installer ces paquets:

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

Exemples:

  1. Modification d'une option de construction dans un paquet
  2. Impossible de modifier les plugins/sudoers/ins _ *. H

Le logiciel cible n'est pas présent dans les référentiels Ubuntu

Vous pouvez toujours tenter votre chance avec le fichier d’entête spécifique manquant. Utilisez soit le index de paquets Ubunt (l'option permettant de rechercher le contenu des paquets) ou apt-file pour rechercher le fichier. Parfois, plusieurs packages peuvent fournir des fichiers portant le même nom. Dans ce cas, préférez:

  1. Fichiers dans /usr/include.
  2. Paquets de votre architecture (utilisez uname -m pour connaître votre architecture).
  3. Toutes les versions spécifiques dont votre logiciel dépend (telles que Qt4 au lieu de Qt5) - vérifiez les fichiers README et INSTALL de la source (le cas échéant).
  4. Les paquets dont le nom se termine par -dev, qui incluent généralement les en-têtes nécessaires à la compilation.

Voir: Comment trouver le paquet qui fournit un fichier?

1
muru