it-swarm.com.de

Symlink für dbus-Header

Der Quellcode für etwas, das nicht kompiliert werden kann, hat die Zeile #include <dbus/dbus.h>, aber im wirklichen Leben befindet sich diese Header-Datei in /usr/include/dbus-1.0/. Eine ähnliche Situation besteht für das Paket dbus-c++.

Warum bietet Ubuntu keinen Symlink /usr/include/dbus an, der auf das Verzeichnis dbus-1.0 verweist? Ist dies ein Fehler im Paket dbus? Wenn beabsichtigt, was ist der Zweck?

Ist es eine richtige Lösung, selbst einen Symlink hinzuzufügen?

(Das Ändern der Quelle ist nicht praktisch - es gibt viele Dateien, und sie müssen mit denen anderer Personen übereinstimmen.)

pdate:

Ok, ich habe die Situation total missverstanden, obwohl es immer noch um ein Problem geht, von dem ich denke, dass es durch einen Symlink gelöst werden sollte. Das Verzeichnis dbus, auf das in der Anweisung #include verwiesen wird, ist ein Verzeichnis auf einer tieferen Ebene unter /usr/include/dbus-1.0/. Das eigentliche Problem ist, dass die Datei dbus-Arch-deps.h zu fehlen scheint, aber tatsächlich an der seltsamen Stelle /usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/ gespeichert ist. Warum bietet Ubuntu in /usr/include/dbus-1.0/dbus keinen Symlink dazu an oder speichert ihn tatsächlich dort?

6
DarenW

dbus-include-Pfade sollen durch einen Aufruf von abgerufen werden

pkg-config dbus-1 --cflags

sie können ein Programm mit dbus von kompilieren

cc dbus-example.c -o dbus-example $(pkg-config dbus-1 --cflags)

oder

make dbus-example CFLAGS+="$(pkg-config dbus-1 --cflags)"

dbus-Header sind in der Zeile enthalten

#include <dbus/dbus.h>

diese "seltsamen Include-Pfade" erhöhen die Flexibilität für zukünftige Versionen von dbus oder anderen Architekturen.

6
don_jones

die Antwort von don_jones scheint zu verdeutlichen, wie das grundlegende Setup funktionieren wird. Aber es ist nicht so, wie es sein sollte, dafür gibt es eine lange Entwicklungsgeschichte.

Warum? Ich habe nicht viel Hintergrundwissen darüber, aber diese, woran ich denken könnte:

  • Informationen zum Standardspeicherort oder Symlink /usr/include/dbus

    Das System ist darauf vorbereitet, mehrere Versionen derselben Bibliothek zu haben, die nicht kompatibel sind. Das Debuggen wird zu schwierig, wenn nicht bekannt ist, welche Version /usr/include/dbus ist. Ich spreche nicht über eine einzelne Bibliothek, aber wenn alle Bibliotheken diese Methode verwendet haben. Selbst bei symbolischen Verknüpfungen müssen Sie alle Verknüpfungen im Baum usr/include suchen und überprüfen. Dies ist nicht praktikabel.

    Daher sind die Kompilierungszeit-Flags der beste Ansatz dafür. Sie sollten diese Flags jedoch nicht manuell setzen, sondern sich die GNU Autotools ansehen. Dies ist Eine kurze Einführung in die GNU Autotools .

  • Über dbus-Arch-deps.h

    Ja, es sollte dort im Pfad x86_64-linux-gnu gespeichert werden. Wie der Name besagt, handelt es sich um einen architekturabhängigen Header, und für jede Architektur werden mehrere Dateien mit demselben Namen erstellt. Ab 12.04 wurde Ubuntu Multiarch. (Auch vor dem 12.04 kann man cross, verschiedene Arch kompilieren).

    Genau: libdbus-1-dev: i386/usr/lib/i386-linux-gnu/dbus-1.0/include/dbus/dbus-Arch-deps.h

    Sie müssen diesen Header nicht manuell einfügen, aber autoconf wird sich darum kümmern.

Es gibt andere Alternativen, zum Beispiel: cmake. Diese Frage ist alt, kann aber jedem, der das Gleiche sucht, die Tür öffnen.

0
user.dz