Le code source de quelque chose qui ne compile pas a la ligne #include <dbus/dbus.h>
mais dans la vie réelle, ce fichier d'en-tête est dans /usr/include/dbus-1.0/
Il en est de même pour le package dbus-c++
.
Pourquoi Ubuntu ne fournit-il pas un lien symbolique /usr/include/dbus
pointant vers le répertoire dbus-1.0
? S'agit-il d'un bogue dans le package dbus
? Si prévu, à quoi sert-il?
Est-ce une solution appropriée d'ajouter un lien symbolique moi-même?
(Changer la source n’est pas pratique - il y a beaucoup de fichiers et ils doivent correspondre à ceux des autres.)
Mise à jour:
Ok, j’ai totalement mal compris la situation, même s’il s’agit toujours d’un problème qui, à mon avis, devrait être résolu par un lien symbolique. Le répertoire dbus mentionné dans l'instruction #include
est un répertoire de niveau plus profond situé sous /usr/include/dbus-1.0/
. Le vrai problème est que le fichier dbus-Arch-deps.h
semble être manquant, mais est en réalité stocké à l'emplacement bizarre /usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/
. Alors maintenant, pourquoi Ubuntu ne fournit-il pas un lien symbolique à ceci dans /usr/include/dbus-1.0/dbus
, ou ne le stocke pas réellement là-bas?
les chemins dbus include sont destinés à être récupérés par un appel à
pkg-config dbus-1 --cflags
vous pouvez compiler un programme en utilisant dbus en
cc dbus-example.c -o dbus-example $(pkg-config dbus-1 --cflags)
ou
make dbus-example CFLAGS+="$(pkg-config dbus-1 --cflags)"
les en-têtes dbus sont inclus par la ligne
#include <dbus/dbus.h>
ces "chemins d'inclusion bizarres" augmentent la flexibilité vis-à-vis des futures versions de dbus ou d'autres architectures.
la réponse de don_jones semble couvrir le fonctionnement de la configuration de base. Mais ce n'est pas comme cela devrait être, il y a une longue histoire de développement pour ceci.
Pourquoi? Je n'ai pas beaucoup de connaissances à ce sujet, mais voici à quoi je pourrais penser:
À propos de l'emplacement par défaut ou du lien symbolique /usr/include/dbus
Le système est prêt à avoir plusieurs versions de la même bibliothèque qui ne sont pas compatibles. Il sera trop difficile de déboguer, si vous ne pouvez pas savoir quelle version est /usr/include/dbus
. Je ne parle pas de simple lib, mais si tout a utilisé cette méthode. Même avec des liens symboliques, alors vous avez trouvé et vérifié tous les liens dans l’arborescence usr/include
, ce n’est pas pratique.
Donc, les indicateurs de temps de compilation sont la meilleure approche pour cela. Cependant, vous ne devriez pas définir vous-même ces indicateurs manuellement, jetez un coup d'œil sur les GNU autotools. Ceci est ne brève introduction à GNU Autotools .
À propos de dbus-Arch-deps.h
Oui, il devrait être stocké dans le chemin x86_64-linux-gnu
. Comme son nom l'indique, il s'agit d'un en-tête dépendant de l'architecture et vous aurez plusieurs fichiers avec le même nom pour chaque architecture. À partir de 12.04, Ubuntu est devenu multiarch. (Même avant 12.04, vous pouvez effectuer une compilation croisée, un autre Arch).
En précision: libdbus-1-dev: i386/usr/lib/i386-linux-gnu/dbus-1.0/include/dbus/dbus-Arch-deps.h
Vous n'avez pas à inclure cet en-tête manuellement, mais autoconf
s'en chargera.
Il existe d'autres alternatives, par exemple: cmake. Cette question est ancienne, mais elle peut ouvrir la porte à quiconque cherche la même chose.