创建库包时出现问题

创建库包时出现问题

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

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

******@******-laptop:~/Documents/temp/jsoncpp/jsoncpp-0.5.0$ 卸载
 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 清洁
   dh_testdir
   dh_auto_clean
   dh_clean
 dpkg-source -b jsoncpp-0.5.0
dpkg-source:信息:使用源格式“1.0”
dpkg-source:信息:使用现有的 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/规则二进制文件
dh 二进制
   dh_testroot
   dh_prep
   dh_installdirs
   dh_auto_install
make[1]: 进入目录 `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
sudo cp -r include/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:错误:fakeroot debian/rules 二进制文件给出错误退出状态 2
debuild:第 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 是这里如果需要的话。

答案1

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

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

答案2

正如您所想,问题出在这里:

cp libjsoncpp.a /usr/lib/libjsoncpp.a

您以普通用户身份进行调用debbuild,没有权限写入该目录。如果您尝试,sudo debbuild应该可以。

相关内容