символическая ссылка для заголовков dbus

Исходный код для чего-то, что не будет компилироваться, имеет строку #include <dbus/dbus.h>, но в реальной жизни этот заголовочный файл находится в /usr/include/dbus-1.0/ Аналогичная ситуация существует для пакета dbus-c++.

Почему Ubuntu не предоставляет символическую ссылку /usr/include/dbus, указывающую на каталог dbus-1.0? Это ошибка в пакете dbus? Если задумано, для чего это нужно?

Правильно ли добавлять символическую ссылку самостоятельно?

(Изменение источника нецелесообразно - файлов много, и они должны соответствовать тому, что есть у других людей.)

Обновление:

Хорошо, я совершенно не понял ситуацию, хотя она все еще сводится к проблеме, которая, я думаю, должна быть решена с помощью символической ссылки. Каталог dbus, указанный в операторе #include, является каталогом более глубокого уровня в разделе /usr/include/dbus-1.0/. Реальная проблема заключается в том, что файл dbus-arch-deps.h, похоже, отсутствует, но на самом деле хранится в странном месте /usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/. Итак, теперь, почему Ubuntu не предоставляет символическую ссылку на это в /usr/include/dbus-1.0/dbus, или на самом деле не хранит ее там?

6
задан 23 November 2015 в 01:17

2 ответа

dbus включают пути, предназначены, чтобы быть полученным вызовом к

pkg-config dbus-1 --cflags

можно скомпилировать программу с помощью dbus

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

или

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

заголовки dbus включены строкой

#include <dbus/dbus.h>

это "странное включает пути", увеличивают гибкость к будущим версиям dbus или другой архитектуры.

6
ответ дан 23 November 2015 в 01:17

ответ don_jones', кажется, касается, как основная установка, которая будет работать. Но это не, как это должно быть, существует длинная история разработки для этого.

Почему? У меня нет большого количества фона на этом, но них, о чем я мог думать:

  • О местоположении по умолчанию или символьной ссылке /usr/include/dbus

    Система готова иметь несколько версий той же библиотеки, которые не совместимы. Будет слишком трудно отладить, если не может знать, который версия /usr/include/dbus. Я не говорю о единственном lib, но если весь lib использовал этот метод. Даже с символьными ссылками, затем Вы имеете, находят и регистрируют всю ссылку usr/include дерево, это не практично.

    Таким образом, флаги времени компиляции являются лучшим подходом для этого. Однако Вы не должны устанавливать это флаги сами вручную, сделать взгляд на автоинструменты GNU. Это - краткое введение в Автоинструменты GNU.

  • О нас dbus-arch-deps.h

    Да, это должно быть сохранено там в x86_64-linux-gnu путь. Как имя указывает, это - архитектурно-зависимый заголовок, и Вы будете несколько файлов с тем же названием каждой архитектуры. Начиная от 12,04, Ubuntu стала мультидугой. (Даже прежде 12.04, можно пересечь компиляцию, другую дугу).

    В точном: libdbus-1-dev:i386 /usr/lib/i386-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h

    Вы не должны включать тот заголовок вручную, но autoconf будет заботиться об этом.

Существуют другие альтернативы, пример: cmake. Этот вопрос стар, но он может открыть дверь для любого ищущего то же самое.

0
ответ дан 23 November 2015 в 01:17

Другие вопросы по тегам:

Похожие вопросы: