我已经打包了一个名为 的库base
并将其上传到我的ppa:satyagowtham-k-gmail/ferryfair.ppa
。 launchpad 已成功构建了该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 xenial 构建 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/规则
#!/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/控制
Source: logger
Priority: optional
Maintainer: Satya Gowtham Kudupudi <[email protected]>
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.
答案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
。我可以找到
cmake
Debian 手册解释了项目向 MultiArch 的转变。一个新的GNUInstallDirs 模块已添加到 cmake v3.3。
包括用于 MultiArch 路径支持的新模块
include(GNUInstallDirs)
然后使用
CMAKE_INSTALL_LIBDIR
(/usr/lib/<triplet>
)变量代替。
关于软件包命名的一个小提示,
base
为了遵循 Debian 政策,二进制文件不包含可执行文件。因此,最好使用lib
前缀libbase1
&来命名它们libbase-dev
。