无法创建库包

Nat*_*man 7 package-management

我在为共享库创建包时遇到了一些问题。

我运行dh_make并编辑了文件。但是,当我去构建包时,我得到以下信息:

******@******-笔记本电脑:~/Documents/temp/jsoncpp/jsoncpp-0.5.0$ debuild
 dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage:将 CFLAGS 设置为默认值:-g -O2
dpkg-buildpackage:将 CPPFLAGS 设置为默认值: 
dpkg-buildpackage:将 LDFLAGS 设置为默认值:-Wl,-Bsymbolic-functions
dpkg-buildpackage:将 FFLAGS 设置为默认值:-g -O2
dpkg-buildpackage:将 CXXFLAGS 设置为默认值:-g -O2
dpkg-buildpackage: 源包 jsoncpp
dpkg-buildpackage:源版本 0.5.0-1
dpkg-buildpackage: 源代码更改为****** 
dpkg-buildpackage:主机架构 amd64
 fakeroot debian/规则干净
卫生干净
   dh_testdir
   dh_auto_clean
   dh_clean
 dpkg-source -b jsoncpp-0.5.0
dpkg-source:信息:使用源格式“1.0”
dpkg-source: info: 使用现有的 jsoncpp_0.5.0.orig.tar.gz 构建 jsoncpp
dpkg-source:信息:在 jsoncpp_0.5.0-1.diff.gz 中构建 jsoncpp
dpkg-source:信息:在 jsoncpp_0.5.0-1.dsc 中构建 jsoncpp
 Debian/规则构建
dh 构建
   dh_testdir
   dh_auto_configure
   dh_auto_build
make[1]: 进入目录`/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
测试 -d obj || mkdir obj
g++ -I ./include -c -o obj/json_reader.o src/lib_json/json_reader.cpp
g++ -I ./include -c -o obj/json_writer.o src/lib_json/json_writer.cpp
g++ -I ./include -c -o obj/json_value.o src/lib_json/json_value.cpp
ar -r libjsoncpp.a obj/json_reader.o obj/json_writer.o obj/json_value.o
ar:创建 libjsoncpp.a
make[1]: 离开目录`/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
   dh_auto_test
 fakeroot debian/rules 二进制文件
dh 二进制
   dh_testroot
   dh_prep
   dh_installdirs
   dh_auto_install
make[1]: 进入目录`/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
须藤 cp -r 包含/json --target-directory=/usr/include
错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“libfakeroot-sysv.so”:忽略。
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp:无法创建常规文件`/usr/lib/libjsoncpp.a':权限被拒绝
make[1]: *** [安装] 错误 1
make[1]: 离开目录`/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
dh_auto_install: make -j1 install DESTDIR=/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp 返回退出代码 2
make: *** [二进制] 错误 29
dpkg-buildpackage: error: fakeroot debian/rules binary 给出错误退出状态 2
解构:第 1340 行的致命错误:
dpkg-buildpackage -rfakeroot -D -us -uc 失败

问题似乎在这里:

错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“libfakeroot-sysv.so”:忽略。
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp:无法创建常规文件`/usr/lib/libjsoncpp.a':权限被拒绝

……但我一点也不知道问题是什么。

如果需要,makefile 在这里

ajm*_*tch 4

您使用的 Makefile 不考虑 DESTDIR 变量 - 软件包不应在构建时直接安装到 /usr 中,而是将文件放入临时树中。您已经提到您自己添加了 Makefile - 通常的情况是您需要使其使用 DESTDIR 变量作为所有安装路径的前缀。查看了包构建指令后,发现该包使用 scons 作为构建系统,它是 make 的某种替代品。dh_make 很可能没有用于构建软件包的模板,因此您应该寻找使用它来构建的软件包,例如 yafray,并查看它们的 debian/rules

由于包构建永远不会以 root 身份完成,因此最好显示并纠正此错误,而不是让包覆盖重要文件,因为包是在毫无戒心的开发人员系统上构建的。