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

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

Почему doesn ' t 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 или фактически хранит там?

1
задан 23 November 2015 в 02:17

1 ответ

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

Почему? У меня мало информации об этом, но об этом я мог подумать:

О местоположении по умолчанию или символической ссылке /usr/include/dbus Система готова иметь несколько версий той же библиотеки, которые несовместимы. Слишком сложно отладить, если не можете узнать, какая версия /usr/include/dbus. Я не говорю об одной lib, но если все lib использовали этот метод. Даже с символическими ссылками, вы обнаруживаете и проверяете всю ссылку в дереве usr/include, это непрактично. Поэтому флаги времени компиляции - лучший подход для этого. Однако вы не должны устанавливать эти флаги вручную, посмотрите на GNU autotools. Это краткое введение в GNU Autotools. О 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
ответ дан 25 May 2018 в 21:23

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

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