dpkg-shlibdeps: ошибка: не мог найти библиотеку необходимой .so при упаковке пакета, зависящего от моего другого пакета

Я упаковал названную библиотеку base и загруженный на мой ppa:satyagowtham-k-gmail/ferryfair.ppa. панель запуска успешно создала base пакет и я успешно установили его sudo apt install base-dev. Теперь я упаковываю другую названную библиотеку logger который зависит от base.

Я добавил мой ppa кому: pbuilder chroot

$ sudo cp ~/pbuilder/xenial-base.tgz /var/cache/pbuilder/base.tgz
$ pbuilder login --save-after-login
# apt-add-repository ppa:satyagowtham-k-gmail/ferryfair.ppa
# apt-get update
# exit

pbuilder-dist гостеприимная сборка logger_1.0-0ubuntu1.dsc дает ниже ошибки

...
...
install -d debian/logger-dev/DEBIAN
    dpkg-shlibdeps -Tdebian/logger1.substvars -l/build/logger-1.0/lib/x86_64 --ignore-missing-info debian/logger1/usr/lib/x86_64/liblogger.so.1.0
dpkg-shlibdeps: error: couldn't find library libbase.so.1 needed by debian/logger1/usr/lib/x86_64/liblogger.so.1.0 (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: cannot continue due to the error above
Note: libraries are not searched in other binary packages that do not have any shlibs or symbols file.
To help dpkg-shlibdeps find private libraries, you might need to use -l.
dh_shlibdeps: dpkg-shlibdeps -Tdebian/logger1.substvars -l/build/logger-1.0/lib/x86_64 --ignore-missing-info debian/logger1/usr/lib/x86_64/liblogger.so.1.0 returned exit code 2
debian/rules:10: recipe for target 'override_dh_shlibdeps' failed
make[1]: *** [override_dh_shlibdeps] Error 2
make[1]: Leaving directory '/build/logger-1.0'
debian/rules:13: recipe for target 'binary' failed
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2
...
...

debian/rules

#!/usr/bin/make -f
# -*- makefile -*-

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

override_dh_auto_test:
override_dh_usrlocal:
override_dh_shlibdeps:
    dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -l$(shell pwd)/lib/$(shell uname -m)

%:
    dh $@ --buildsystem=cmake

debian/control

Source: logger
Priority: optional
Maintainer: Satya Gowtham Kudupudi <satyagowtham.k@gmail.com>
Build-Depends: debhelper (>= 9), cmake, base-dev
Standards-Version: 3.9.7
Section: non-free/libs
Homepage: https://github.com/necktwi/logger
Vcs-Git: https://github.com/necktwi/logger.git
Vcs-Browser: https://github.com/necktwi/logger

Package: logger-dev
Section: non-free/libdevel
Architecture: any
Depends: logger1 (= ${binary:Version}), ${misc:Depends}, base1
Description: logger from ferryfair.com
 It logs a beautiful and useful format.

Package: logger1
Section: non-free/libs
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends},  base1
Description: logger from ferryfair.com
 It logs a beautiful and useful format.
2
задан 27 November 2016 в 05:56

1 ответ

  • Проблема находится base пакет. Это действительно устанавливает общий объект в неправильном пути

    /usr/lib/x86_64/
    

    где это должно быть в

    /usr/lib/x86_64-linux-gnu/
    
  • Следуя из Вашего предыдущего вопроса, Вы внесли некоторые изменения в CMakeLists.txt устанавливать библиотеку не в /usr/lib/ использование:

    include(TargetArch.cmake)
    target_architecture(arch)
    ...
    install(TARGETS ${PROJECT_NAME} DESTINATION lib/${arch})
    ...
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc"
        DESTINATION lib/${arch}/pkgconfig
        RENAME "lib${PROJECT_NAME}.pc")
    

    Новая переменная ${arch} заменяется x86_64.

  • Я мог найти, что руководство Debian объясняет перемещение MultiArch для cmake проекты.

    Новый модуль GNUInstallDirs был добавлен к cmake v3.3.

    1. Включайте новый модуль для поддержки путей MultiArch

      include(GNUInstallDirs)
      
    2. Затем используйте CMAKE_INSTALL_LIBDIR (/usr/lib/<triplet>) переменная вместо этого.

  • Просто маленькое примечание о base именование пакета для следования за политикой Debian двоичный файл не содержит исполняемые файлы. Следовательно, лучше для именования их с lib префикс, libbase1 & libbase-dev.

1
ответ дан 27 November 2016 в 05:56

Другие вопросы по тегам:

Похожие вопросы: