symlink для заголовков dbus

6

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

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

Является ли это правильным исправлением для добавления символической ссылки?

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

Update:

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

    
задан DarenW 06.05.2011 в 18:17
источник

2 ответа

6

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 20.10.2011 в 20:08
источник
0

Ответ 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. Этот вопрос старый, но он может открыть дверь для тех, кто ищет то же самое.

    
ответ дан user.dz 22.11.2015 в 13:29