dpkg-shlibdeps: ошибка: информация о зависимости не найдена

Я пытаюсь создать пакет .deb моего приложения Qt с помощью dpkg-buildpackage. Я собрал стороннюю (snmp) для использования в моем приложении. Работает успешно. Но при создании приложения .deb a получило ошибку:

dpkg-shlibdeps: ошибка: не найдена информация о зависимости для /usr/local/lib/libnetsnmp.so.30

Я искал решение по этой ссылке:

dpkg-shlibdeps: ошибка: не найдена информация о зависимостях для

а также на других страницах, но не нашел решения.

Я попытался отредактировать /etc/ld.so.conf, чтобы добавить путь к libnetsnmp.so.30, но это не сработало.

Я просто понял, когда запускаю команду:

ldconfig -p | grep libnetsnmp.so.30

что я получил две библиотеки libnetsnmp.so.30 в ldconfig, а также что они отличаются друг от друга.

libnetsnmp.so.30 (libc6,x86-64) => /usr/local/lib/libnetsnmp.so.30
libnetsnmp.so.30 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libnetsnmp.so.30

Я также попытался сделать доступным только один из них. Но это не сработало.

Есть ли способ генерирования пакета .deb с или без этой библиотеки?

Обс .: Я не собираюсь редактировать / USR / BIN / DPKG-shlibdeps в $ ignore_missing_info = 1 как обходной путь.

Спасибо

2

Решение

dpkg-shlibdeps это инструмент, предназначенный для определения всех пакетов, от которых зависит ваш новый пакет, посредством динамического связывания. Он делает это, проверяя все ваши новые двоичные файлы, чтобы увидеть, с какими библиотеками они связаны, и какие символы из этих библиотек используются, а затем проверяет базу данных dpkg, чтобы увидеть, каким пакетам принадлежат эти библиотеки, и найти самую низкую версию пакета, необходимую для предоставления необходимые символы

В вашем случае он видит, что ваше приложение связано с этим libnetsnmp.so.30, поэтому он проверяет, какой пакет владеет этой библиотекой. Ой, никакой пакет не делает. Вот откуда возникает ошибка — может быть, вы уже все это знаете, но я подумал, что я бы включил ее для контекста.

Правильное решение теперь зависит от того, как вы хотите обращаться со своей скомпилированной библиотекой snmp. По сути, вы можете выбрать следующие варианты: (а) отправить ваш собственный libnetsnmp вместе с вашим пакетом, (b) упаковать ваш собственный libnetsnmp отдельно или (c) вообще не использовать собственный libnetsnmp; использовать что угодно libsnmp* пакет вашей ОС обеспечивает вместо.

(a): чтобы отправить libnetsnmp вместе с вашим пакетом, вы должны быть осторожны, чтобы убедиться, что он не обеспечивает то же самое SONAME как стандартный пакет libsnmp, чтобы они не мешали друг другу. Самый простой способ сделать это, вероятно, состоит в том, чтобы статически связываться с ним (ссылка на .a или же .o файлы вместо .so динамическая библиотека). Это может вызывать недовольство, если ваш пакет предназначен для собственно Debian или Ubuntu, но если вы продемонстрируете, что варианты (b) и (c) не работают для вас, это, вероятно, будет хорошо.

(б): правильная упаковка библиотек — довольно глубокая тема; слишком много для ответа StackOverflow. Но документация там. В зависимости от того, насколько ваш libnetsnmp изменен по сравнению с предыдущей версией, вы можете изменить имя библиотеки (и SONAME) чтобы избежать путаницы. Если ваш libnetsnmp — это просто бэкпорт новых пакетов libsnmp в Debian sid или Ubuntu, то правильным решением может быть отправка копии «официального» libsnmp30 Deb в вашем PPA или организовать libsnmp30 быть отправленным в репозитории -backports. Тогда вам просто нужно добавить Build-Depends: на libsnmp-dev (>= whatever) к вашему пакету, и создайте против этого (вместо установленного вручную .so файла в /usr/local).

(c): Если вам на самом деле не нужно было делать пользовательскую компиляцию snmp, и версия, доступная в вашем OS / дистрибутиве, достаточно хороша, тогда просто Build-Depends: на этом, и удалите установленный вручную .so файл в /usr/local,

6

Другие решения


По вопросам рекламы [email protected]