Попытка упаковать библиотеку приводит к пакету без двоичного файла

Я новичок в упаковке и пытаюсь упаковать библиотеку, которую использует одна из моих программ. Библиотека называется Plytapus и используется программой PerfectTIN. Вы можете найти исходный код для них обоих на моем сайте GitHub, https://github.com/phma/ , и на сайте PerfectTIN, http://bezitopo.org/perfecttin/ download.html . Пакеты с исходным кодом находятся на https://launchpad.net/~phma-a/+archive/ubuntu/testing .

Я попытался собрать пакет PerfectTIN после добавления plytapus-dev к требованиям сборки (с установленным только plytapus, он был собран без plytapus) и получил неудачу. Оказалось, что в пакете plytapus отсутствует файл .so. Я отредактировал файлы в каталоге debian и попробовал еще раз.

changelog

plytapus (0.6.0-3) focal; urgency=medium

  * Remove extra asterisk from plytapus1.install

 -- Pierre Abbat <phma@bezitopo.org>  Sun, 20 Dec 2020 14:02:52 -0500

plytapus (0.6.0-2) focal; urgency=medium

  * Add cmake as dependency

 -- Pierre Abbat <phma@bezitopo.org>  Mon, 23 Nov 2020 03:42:16 -0500

plytapus (0.6.0-1) focal; urgency=medium

  * Initial release

 -- Pierre Abbat <phma@bezitopo.org>  Tue, 17 Nov 2020 02:18:06 -0500

plytapus1.install

usr/lib/lib*.so.*
usr/lib/lib*.a

control

Source: plytapus
Priority: optional
Maintainer: Pierre Abbat <phma@bezitopo.org>
Build-Depends: debhelper-compat (= 12), cmake (>= 3.4)
Standards-Version: 4.4.0
Section: libs
Homepage: https://github.com/phma/plytapus
#Vcs-Browser: https://salsa.debian.org/debian/plytapus
#Vcs-Git: https://salsa.debian.org/debian/plytapus.git

Package: plytapus-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: plytapus (= ${binary:Version}), ${misc:Depends}
Description: Library for reading and writing PLY files
 Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
 files.
 .
 This package provides the header files.

Package: plytapus
Architecture: any
Multi-Arch: same
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Library for reading and writing PLY files
 Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
 files.
 .
 This package provides the shared and static library.

Вот соответствующий раздел журнала сборки:

make[2]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "None"
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so.0.6.0
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.a
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/config.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/textio.h
make[1]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
   dh_install
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_link
   dh_strip_nondeterminism
   dh_compress
   dh_fixperms
   dh_missing
dh_missing: usr/lib/libplytapus.so.0.6.0 exists in debian/tmp but is not installed to anywhere
dh_missing: usr/lib/libplytapus.a exists in debian/tmp but is not installed to anywhere
    The following debhelper tools have reported what they installed (with files per package)
     * dh_install: plytapus (0), plytapus-dev (3)
     * dh_installdocs: plytapus (0), plytapus-dev (0)
    If the missing files are installed by another tool, please file a bug against it.
    When filing the report, if the tool is not part of debhelper itself, please reference the
    "Logging helpers and dh_missing" section from the "PROGRAMMING" guide for debhelper (10.6.3+).
      (in the debhelper package: /usr/share/doc/debhelper/PROGRAMMING.gz)
    Be sure to test with dpkg-buildpackage -A/-B as the results may vary when only a subset is built
    For a short-term work-around: Add the files to debian/not-installed
   dh_dwz
   dh_strip
   dh_makeshlibs
   dh_shlibdeps
   dh_installdeb
   dh_gencontrol
dpkg-gencontrol: warning: Depends field of package plytapus: substitution variable ${shlibs:Depends} used, but is not defined
   dh_md5sums
   dh_builddeb
dpkg-deb: building package 'plytapus-dev' in '../plytapus-dev_0.6.0-3_amd64.deb'.
dpkg-deb: building package 'plytapus' in '../plytapus_0.6.0-3_amd64.deb'.

Как я могу исправить это, чтобы Файлы .so и .a находятся в пакете plytapus?

0
задан 20 December 2020 в 23:02

2 ответа

Повторяя мой ответ из https://lists.launchpad.net/launchpad-users/msg07147.html:

  1. Система основной сборки устанавливается в .../usr/lib/lib*.so.*, но в той версии вашего пакета, которую я скачал debian/plytapus1.install, написано usr/lib/*/lib *.so.*, а не usr/lib/lib*.so.*, как вы указали выше. Вам нужно удалить бит /*. (Я предполагаю, что вы использовали dh-make, и предполагается, что исходная конфигурация cmake следует рекомендациям в https://wiki.debian.org/Multiarch. /Implementation#CMake, но этот пакет этого не делает; поэтому вам нужно либо сделать так, чтобы упаковка ожидала пути до мультиархитектуры, либо изменить исходную конфигурацию cmake, чтобы она была дружественной к мультиархитектуре, как в этом wiki.)
  2. debian/control имеет имя пакета библиотеки времени выполнения как plytapus, что означает, что debian/plytapus1.* полностью игнорируются.
  3. Имена пакетов библиотек должны начинаться с «lib».
  4. Бит "1" все равно в настоящее время неверен; в Руководстве по политике Debian сказано, что он должен совпадать с номером версии в библиотеке SONAME, который в данном случае равен «0.6.0» (вы можете использовать objdump -p в файле .so, чтобы увидеть его). Вам нужно обязательно изменить это каждый раз, когда изменяется исходный SONAME.
  5. Похоже, что в настоящее время вы не устанавливаете SONAME явным образом в исходной конфигурации cmake и просто оставляете cmake на догадку. Возможно, это непреднамеренно, так как это означает, что каждый новый выпуск основной ветки разработки может быть полностью несовместим с ABI с каждым предыдущим. Если это не то, что вы имели в виду, то вы должны установить SOVERSION в восходящей конфигурации cmake (я думаю, я не очень хорошо разбираюсь в cmake) и, возможно, прочитать о том, что вам нужно делать при поддержке интерфейса библиотеки C++. Файлы символов являются полезной дисциплиной, если это возможно.

Итак, собрав все вместе, вы должны удалить /* из debian/plytapus1.install. Вы должны переименовать debian/plytapus1.install в debian/libplytapus0.6.0.install и debian/plytapus-dev.install в debian/libplytapus- dev.install.Вы должны изменить две строки «Пакет:» в debian/control с plytapus-dev и plytapus на libplytapus-dev и libplytapus0.6.0, а также настроить libplytapus-Строка Depends dev для соответствия. Вы также можете полностью удалить debian/*.dirs, так как они не нужны. И я бы порекомендовал разобраться с ситуацией с вышестоящим ABI, после чего вам нужно будет снова настроить имена пакетов библиотек, чтобы они соответствовали (если ваша библиотека действительно имеет довольно стабильный ABI, тогда вы будете вознаграждены тем, что не нужно менять имена бинарных пакетов некоторое время).

0
ответ дан 6 January 2021 в 12:21

Я думаю, это из-за неправильного имени файла. Попробуйте переименовать plytapus1.install в plytapus.install.

0
ответ дан 23 December 2020 в 04:33

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

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