2014-12-01 2 views
2

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

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

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

dpkg-shlibdeps: error: no dependency information found for

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

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

Я просто понял, когда выполнить команду:

ldconfig -p | grep libnetsnmp.so.30 

, что я получил два libnetsnmp.so.30 LIBS в 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 с или без этой библиотеки?

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

Благодаря

+0

Благодарим за упоминание опции редактирования dpkg-shlibdeps в $ ignore_missing_info = 1. Это сработало для меня! –

ответ

6

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

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

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

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

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

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

Смежные вопросы