Исходный код для чего-то, что не будет компилироваться, имеет строку #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
, или на самом деле не хранит ее там?
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 или другой архитектуры.
ответ 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. Этот вопрос стар, но он может открыть дверь для любого ищущего то же самое.