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 包的更多相关文章

  1. rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址

    一.下载 clickhouse 源码包 git clone --recurse-submodules -b v1.1.54385-stable https://github.com/yandex/Cl ...

  2. ceph 生成rpm包

    概述 从ceph的源码build出rpm包: #git clone --recursive https://github.com/ceph/ceph.git #./instal-dep.sh 以上两点 ...

  3. shell如何生成rpm包仓库列表文件的对比结果

    基本步骤: 1.切换至仓库目录RPM_LIST_DIR1和RPM_LIST_DIR2 2.ls列出仓库的rpm包文件并分别重定向至输出文件rpm_list_file1和rpm_list_file2 3 ...

  4. rpmbuild打包

    安装: yum  install -y rpm-build 目录介绍: 默认目录在  /root/rpmbuild BUILD :你要打包的文件将会在这里编译(编译rpm包的临时目录) BUILDRO ...

  5. linux下静态链接库和动态链接库

    关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...

  6. rpm包的rpmbuild spec文件详解

    http://machael.blog.51cto.com/829462/213477 上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包.最后部分还看到.src.rp ...

  7. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  8. GO 使用 动态链接库(共享链接库)进行编译 生成动态链接可执行文件

    我们使用 go help buildmode 可以看到 go 可以以多种方式进行构建,默认使用静态链接库. ➜ src go help buildmode The 'go build' and 'go ...

  9. GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造

    go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...

随机推荐

  1. Timer和ScheduledThreadPoolExecutor的区别

    Timer 基于单线程.系统时间实现的延时.定期任务执行类.具体可以看下面红色标注的代码. public class Timer { /** * The timer task queue. This ...

  2. NC24840 [USACO 2009 Mar S]Look Up

    NC24840 [USACO 2009 Mar S]Look Up 题目 题目描述 Farmer John's N (1 <= N <= 100,000) cows, convenient ...

  3. 『现学现忘』Git后悔药 — 27、版本回退介绍

    目录 1.什么版本回退 2.需要了解两个知识点 (1)HEAD是什么 (2)HEAD指针用法 3.git reflog命令介绍 1.什么版本回退 版本回退也可以叫回滚. 若修改过的文件,不仅添加到了暂 ...

  4. js导入excel&导出excel

    Excel导入 html代码 <button style={{ color: '#1890ff', fontSize: '14px', cursor: 'pointer' }} onClick= ...

  5. FastASR——PaddleSpeech的C++实现

    FastASR 基于PaddleSpeech所使用的conformer模型,使用C++的高效实现模型推理,在树莓派4B等ARM平台运行也可流畅运行. 项目简介 本项目仅实现了PaddleSpeech ...

  6. 前 K 个高频元素问题

    前 K 个高频元素问题 作者:Grey 原文地址: 前 K 个高频元素问题 题目描述 LeetCode 347. Top K Frequent Elements 思路 第一步,针对数组元素封装一个数据 ...

  7. 发现Mapstruct的一个bug

    前言 在一次需求的开发过程中,发现一个对象插入数据库时某个字段总是为空.简化后的代码如下: @Autowired private PersonService personService; public ...

  8. 关于ios的IDFA

    了解IDFA,看我这篇文章就够了双11剁手后,我静静的限制了广告追踪 今年双11爆了,据统计,全天交易额1207亿,移动端占比82%,在马云的持续教育和移动端的爆发下,用户在移动端消费的习惯已经不可逆 ...

  9. OptaPlanner 发展方向与问题

    ​ 最近一段时间,因为忙于[易排(EasyPlan)规划平台]的设计与开发工作,平台的一些功能设计,需要对OptaPlanner的各种特性作更深入的研究与应用.慢慢发现,OptaPlanner进入8. ...

  10. 应用启动加速-并发初始化spring bean

    背景 随着需求的不断迭代,服务承载的内容越来越多,依赖越来越多,导致服务启动慢,从最开始的2min以内增长到5min,导致服务发布很慢,严重影响开发效率,以及线上问题的修复速度.所以需要进行启动加速. ...