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?
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:
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:
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:
/usr/include
.uname -m
pour connaître votre architecture).README
et INSTALL
de la source (le cas échéant).-dev
, qui incluent généralement les en-têtes nécessaires à la compilation.