利用rpmbuild 打包可执行文件和链接库生成rpm 包
Background:
Background: 遇到一个打包可执行程序和链接库生成rpm 包的需求,查遍了很多网站的资料,现在整理下解决方案。
前期参考的是这篇帖子: https://codeantenna.com/a/jUEqRgoEsZ
CSDN 很多帖子都是抄的rpm 官方提供的教程:https://www.thegeekstuff.com/2015/02/rpm-build-package-example/
这个帖子介绍了rpmbuild 的所有操作,包括把源码放到rpmbuild 创建的文件夹中,通过配置spec完成从源码=》编译=》打包=》安装的全流程,很详细但是太复杂了。我遇到的场景是,已经构建了CMAKELIST, 可以通过写好的脚本一键编译生成可执行程序和需要的动态连接库,我们这里只需要打包一下即可。
Processing:
该打包过程只是记录了一下将二进制放入rpm中的过程和注意事项,不涉及预编译、编译和安装等繁琐的过程。
1 、安装依赖
此次打包是SUSE 系统,需要提前安装 rpmbuild 工具。
zypper in -y rpm-build rpmdevtools
2、创建安装目录
通过rpm 构建默认的文件夹,rpm 默认创建文件夹的路径都是在~/ 目录,如果你把rpmbuild 目录移动到其他地方,进去build ,会显示找不到文件,可以修改rpmbuild 的路劲信息,但是本教程就在~/ 目录下打包。
rpmdev-setuptree
# ls -lF /home/rpmbuild/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 BUILD/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 BUILDROOT/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 RPMS/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 SOURCES/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 SPECS/
drwxr-xr-x. 2 home home 4096 Feb 4 12:21 SRPMS/
3、编写spec文件
在SPECS目录中,创建并编写一个**.spec文件,名字无所谓,格式如下,这个文件很关键,这是告诉rpmbuild 如何打包,其他不相关的我直接删了,只留最需要的
%files 是告诉rpm 打包方法,即你最终想如何把你的程序安装到linux 系统里面。
Summary: test package.
Name: Test
Version: 1.0
Release: 200
License: GPL
Group: test
AutoReqProv: no
%description
test process rpm.
%files
/usr/bin/test
/usr/test
我现在有两个资源,一个test程序需要在安装之后放到/usr/bin目录,之前cmake 会生成test 和libtest.so 这两个得在一块才能运行,所以我把这两个文件都放在/usr/test/ 中,然后 在/usr/bin/中链接一个可执行程序 ../test/test .
4、放置资源
放入资源的时候需要根据编写的spec文件来放置,在BUILDROOT目录要先创建一个目录Test-1.0-200.x86_64,该目录是根据spec文件中配置拼接而成:Name-Version-Release.arch。
然后在Test-1.0-200.x86_64中创建目录usr/bin,usr/test/,然后将test、libtest.so 放入usr/test/ ,然后cd usr/bin, ln -s ../test/test , 这样就把可执行程序链接到了usr/bin,这样后期安装也是这么按照到linux 下的/usr
其实打包方式很灵活的,需要结合当前项目的需求灵活考虑
5、打包
进入SPECS目录,执行 rpmbuild -bb **.spec 命令,就可以在RPMS目录中生成相应的rpm包了。
利用rpmbuild 打包可执行文件和链接库生成rpm 包的更多相关文章
- rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址
一.下载 clickhouse 源码包 git clone --recurse-submodules -b v1.1.54385-stable https://github.com/yandex/Cl ...
- ceph 生成rpm包
概述 从ceph的源码build出rpm包: #git clone --recursive https://github.com/ceph/ceph.git #./instal-dep.sh 以上两点 ...
- shell如何生成rpm包仓库列表文件的对比结果
基本步骤: 1.切换至仓库目录RPM_LIST_DIR1和RPM_LIST_DIR2 2.ls列出仓库的rpm包文件并分别重定向至输出文件rpm_list_file1和rpm_list_file2 3 ...
- rpmbuild打包
安装: yum install -y rpm-build 目录介绍: 默认目录在 /root/rpmbuild BUILD :你要打包的文件将会在这里编译(编译rpm包的临时目录) BUILDRO ...
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...
- rpm包的rpmbuild spec文件详解
http://machael.blog.51cto.com/829462/213477 上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包.最后部分还看到.src.rp ...
- 利用GCC编译器生成动态链接库和静态链接库
转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...
- GO 使用 动态链接库(共享链接库)进行编译 生成动态链接可执行文件
我们使用 go help buildmode 可以看到 go 可以以多种方式进行构建,默认使用静态链接库. ➜ src go help buildmode The 'go build' and 'go ...
- GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造
go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...
随机推荐
- 图片64base转码与解码
场景一:图片转码成base64,传输,接收后解码成png等格式图片 import base64 # 读取图片,转换为base64编码格式 with open("F:\Archer\pictu ...
- (一)Linux环境的学习环境的搭建
我们使用VMWARE来安装Debian11系统来进行我们的LINUX学习 Debian虚拟机的安装 vmware-tools的安装 xShell的安装使用 samba的配置 gcc环境的配置 Debi ...
- String长度限制?
String我们在开发和学习中会经常用到,但对String类型的取值范围我们并不明确. String底层是char数组,并未标明长度限制.java中可以对数组指定长度,如果不指定就以实际元素来指定 p ...
- 虚拟机启动时报’A start job is running for /etc/rc.local .. Compatibility错误。
虚拟机启动时报'A start job is running for /etc/rc.local .. Compatibility错误. 问题已经存在很长时间了,但是不影响ssh登录,遂置之未理. 经 ...
- Grammarly for Chrome-语法、用词自动检查
从语法和拼写到风格和语气,Grammarly帮助你消除写作错误,找到完美的词语来表达自己.当你在Gmail.Twitter.LinkedIn和几乎任何你发现自己在写作的地方写作时,你都会从Gramma ...
- CTCLoss如何使用
CTCLoss如何使用 目录 CTCLoss如何使用 什么是CTC 架构介绍 一个简单的例子 CTC计算的推导 总概率\(p(z|x)\) 路径的含义 路径概率\(p(\pi|x)\) 什么是\(\m ...
- centos7 netstat command not found
只需要执行: yum install net-tools 就ok.
- 86开关、家电、台扇等6键6路6感应通道高抗干扰触摸IC-VK3606D,稳定性好,抗干扰能力强
概述: VK3606D SOP16具有6个触摸按键,可用来检测外部触摸按键上人手的触摸动作.该芯片具有较高的集成度,仅需极少的外部组件便可实现触摸按键的检测.提供了6路1对1直接输出低电平有效.最长输 ...
- 微信安装包从0.5M暴涨到260M,为什么我们的程序越来越大?
最近,微信安装包从v1.0的0.5M暴涨到V8.0的 260M引起大家热议,为什么我们开发的程序越来越大?本文做一个简单的讨论.(本文主要根据B站科技老男孩<逆向工程微信安装包,11年膨胀575 ...
- Lambda表达式无参数无返回值的练习和Lambda表达式有参数有返回值的练习
题目: 给定一个厨子Cook接口,内容唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ void makeFood(); } 在下面的代碼中,使 ...