Dpkg-shlibdeps: error: информация о зависимости, найденная для
Я компилирую пакет deb, и когда я запускаю dpkg-buildpackage, я получаю:
dpkg-shlibdeps: error: no dependency information found for /usr/local/lib/libopencv_highgui.so.2.3
...
make: *** [binary-arch] Error 2
Это происходит потому, что я установил зависимость вручную. Я знаю, что проблема будет исправлена, если я устанавливаю зависимость (или использую checkinstall), и я все равно хочу сгенерировать пакет, потому что меня не интересует проверка зависимостей. Я знаю, что я могу дать dpkg-shlibdeps вариант --ignore-missing-info
, который предотвращает сбой, если информация о зависимости не может быть найдена. Но я не знаю, как передать этот параметр dpkg-shlibdeps, так как я использую dpkg-buildpackage и dpkg-buildpackage вызывает dpkg-shlibdeps...
Я уже пробовал:
sudo dpkg-buildpackage -rfakeroot -d -B
И с помощью:
export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info
как root.
Любые идеи?
Ответы
Ответ 1
Использование:
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
если в вашем файле правил нет вызова dh_shlibdeps. Обычно это так, если вы
%:
dh [email protected]
как единственное правило в этом... выше вы должны использовать вкладку, а не пробелы перед dh_shlibdeps
Ответ 2
Если вы хотите, чтобы он просто игнорировал этот флаг, измените строку debian/rules на:
dh_shlibdeps
в
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
Ответ 3
Еще один способ, без изменения скриптов сборки, просто создание одного файла.
Вы можете указать local shlib overrides, создав debian/shlibs.local
со следующим форматом: library-name soname-version dependencies
Например, учитывая следующий (обрезанный) ldd /path/to/binary
вывод
libevent-2.0.so.5 => /usr/lib/libevent-2.0.so.5 (0x00007fc9e47aa000)
libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007fc9e4161000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fc9e3b1a000)
Содержимое debian/shlibs.local
будет:
libevent-2.0 5 libevent-2.0
libgcrypt 20 libgcrypt
libpthread 0 libpthread
Список "зависимостей" (третий столбец) не должен быть на 100% точным - я просто снова использую имя библиотеки.
Конечно, это не нужно в здравой системе debian, которая имеет этот материал, определенный в /var/lib/dpkg/info
(который может использоваться как вдохновение для этих переопределений). Шахта не является разумной системой debian.
Ответ 4
Вместо того, чтобы просто игнорировать ошибку, вы также можете исправить источник ошибки, который обычно является либо отсутствующим, либо неправильным package.shlibs
или package.symbols
файлом в пакете, который содержит общую библиотеку, инициирующую ошибку.
[1] документирует, как dpkg-shlibdeps
использует package.shlibs
resp. package.symbols
, файлы [2] документируют формат файлов package.shlibs
и package.symbols
.
Ответ 5
Вы только что опечалили ваш экспорт. Это должно быть так:
export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
Ответ 6
dpkg-buildpackage использует make для обработки debian/rules. в этом процессе dpkg-buildpackage он может назвать dpkg-shlibdeps.
таким образом, правильный способ передачи изменения части процесса сборки пакета - редактировать debian/rules.
трудно дать вам больше намеков, не видя фактических правил debian/.
Ответ 7
Вы можете использовать это:
dh_makeshlibs -a -n
точно после dh_install
Ответ 8
Наконец я сделал это грубо:
Я отредактировал script/usr/bin/dpkg-shlibdeps, изменив это:
my $ignore_missing_info = 0;
to
my $ignore_missing_info = 1;