Подтвердить что ты не робот

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.

Любые идеи?

4b9b3361

Ответ 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;