CN106293861A - 软件源码编译方法及装置 - Google Patents
软件源码编译方法及装置 Download PDFInfo
- Publication number
- CN106293861A CN106293861A CN201510239312.2A CN201510239312A CN106293861A CN 106293861 A CN106293861 A CN 106293861A CN 201510239312 A CN201510239312 A CN 201510239312A CN 106293861 A CN106293861 A CN 106293861A
- Authority
- CN
- China
- Prior art keywords
- software
- compiling
- source code
- minimum
- bag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种软件源码编译方法及装置,解决了现有技术中软件源码编译必须依赖本地环境以及不能保留编译环境的问题。所述软件源码编译方法包括:为软件创建一个最小编译系统;以chroot方式在所述最小编译系统中编译所述软件的源码包;将编译后的源码包存储到指定位置。本发明实施例适用于进行软件源码编译。
Description
技术领域
本发明涉及软件编译技术领域,尤其涉及一种软件源码编译方法及装置。
背景技术
RPM(Red Hat Package Manager,红帽子包管理器)是用于Linux分发版的最常见的软件包管理器。RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。这五种基本功能的实现仅仅需要用RPM+选项+RPM包就能轻易地实现。如果要发布RPM格式的源码包或者是二进制包,就要使用RPM最新打包工具RPMbuild(创建RPM),RPMbuild是一种常用的软件源码编译方法。
在实现本发明的过程中,发明人发现现有技术中至少存在如下技术问题:
采用RPMbuild进行软件源码编译,必须依赖本地环境,在编译过程中容易受到外界环境的干扰,不能有效保证软件源码包编译的正确性。
发明内容
本发明提供的软件源码编译方法及装置,能够为软件构建独立的编译环境,从而可以减少外界环境的干扰,有效保证源码包编写的正确性。
第一方面,本发明提供一种软件源码编译方法,包括:
为软件创建一个最小编译系统;
以改变根目录chroot方式在所述最小编译系统中编译所述软件的源码包;
将编译后的源码包存储到指定位置。
第二方面,本发明提供一种软件源码编译装置,包括:
创建单元,用于为软件创建一个最小编译系统;
编译单元,用于以改变根目录chroot方式在所述最小编译系统中编译所述软件的源码包;
存储单元,用于将编译后的源码包存储到指定位置。
本发明实施例提供的软件源码编译方法及装置,为软件创建一个最小编译系统,以chroot方式在所述最小编译系统中编译所述软件的源码包,将编译后的源码包存储到指定位置。与现有技术相比,本发明能够为软件构建独立的编译环境,以便最大限度地减少外界环境的干扰,从而有效保证源码包的编写的正确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明软件源码编译方法实施例一的流程图;
图2为本发明软件源码编译方法实施例二的流程图;
图3为本发明软件源码编译装置实施例一的结构示意图;
图4为本发明软件源码编译装置实施例二的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种软件源码编译方法,图1为本发明软件源码编译方法实施例一的流程图,如图1所示,本实施例的方法包括:
S11、为软件创建一个最小编译系统;
S12、以chroot(change root,改变根目录)方式在所述最小编译系统中编译所述软件的源码包;
采用chroot方式在所述最小编译系统中编译所述软件的源码包,从而生成新的源码包和工作目录。
S13、将编译后的源码包存储到指定位置。
其中,所述指定位置为系统预先设定好的位置。
本发明实施例提供的软件源码编译方法,为软件创建一个最小编译系统,以chroot方式在所述最小编译系统中编译所述软件的源码包,将编译后的源码包存储到指定位置。与现有技术相比,本发明能够为软件构建独立的编译环境,以便最大限度地减少外界环境的干扰,从而有效保证源码包的编写的正确性。
本发明实施例还提供一种软件源码编译方法,图2为本发明软件源码编译方法实施例二的流程图,以在fedora中进行软件源码编译为例,
如图2所示,本实施例的方法包括:
S21、为软件创建一个最小编译系统。
在fedora中,每个软件的发布版中都会提供最小编译系统的RPM包列表,根据软件发布版中提供的最小编译系统的RPM包列表,为软件创建一个最小编译系统。
其中,在为软件创建一个最小编译系统之前,需要执行如下操作:
首先,为编译环境配置参数;
编译环境的配置参数可以包括:编译时chroot后用户的主目录、是否使用系统DNS(Domain Name System,域名系统)、工作目录、编译超时、编译任务目录、目标平台、编译环境搭建的命令、发布版后缀、是否使用root cache(根缓存)、root cache目录、ccache(compiler cache,编译器缓存)加快重新编译时的速度、ccache大小、ccache目录、是否使用yum cache(yum缓存);
RPM编译相关的配置参数可以包括:编译的主机平台、cpu架构、打包时的vendor(供应商)、编译的根目录、RPM包命名格式、打包者信息等。
然后,配置yum(Yellow dog Updater,Modified)源;
其中,yum是一个软件包管理器,是为了解决Linux系统中特有的依赖关系问题而存在的。yum源相当于一个目录项,当使用yum机制安装软件时,若需要安装依赖软件,则yum机制会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好。yum从指定的地方,例如相关网站的RPM包地址或本地的RPM路径自动下载RPM包并且安装,能够很好的解决依赖关系问题。
yum的基本工作机制如下:
在服务器端,服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内;在客户端,如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件,通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
具体地,配置后续编译软件源码包时需要用到的各种参数和变量,后续需要安装的所有软件都从yum源中获取。
最后,运行run.sh脚本。
其中,run.sh脚本为一shell脚本,shell脚本可将多条命令编写到一个文件中,通过运行脚本文件即可完成指定的工作。常用于系统启动、程序编译等需要重复执行大量命令的场合。
S22、以chroot方式在所述最小编译系统中编译所述软件的源码包。
具体地,可以使用chroot工具进入到所述最小编译系统中,只安装要编译的源码包的依赖包,并进行编译。
其中,所述chroot方式即change root,具体为:改变应用程序执行时所参考的根目录位置,编译完成后运行的所有程序都是指定的根目录下的程序。
S23、将编译后的源码包存储到指定位置。
S24、记录所述软件的源码包的编译过程。
本发明实施例提供的软件源码编译方法,为软件创建一个最小编译系统,以chroot方式在所述最小编译系统中编译所述软件的源码包,将编译后的源码包存储到指定位置。与现有技术相比,本发明能够为软件构建独立的编译环境,以便最大限度地减少外界环境的干扰,从而有效保证源码包的编写的正确性;此外,使用灵活,能根据需要保留编译环境。
上述软件源码编译方法实施例可以基于MIPS(Microprocessor withoutinterlocked piped stages,无内部互锁流水级的微处理器)平台。
本发明实施例提供一种软件源码编译装置,图3为本发明软件源码编译装置实施例一的结构示意图,如图3所示,本实施例的装置包括:
创建单元31,用于为软件创建一个最小编译系统;
编译单元32,用于以chroot方式在所述最小编译系统中编译所述软件的源码包;
采用chroot方式在所述最小编译系统中编译所述软件的源码包,从而生成新的源码包和工作目录。
存储单元33,用于将编译后的源码包存储到指定位置。
其中,所述指定位置为系统预先设定好的位置。
本发明实施例提供的软件源码编译装置,为软件创建一个最小编译系统,以chroot方式在所述最小编译系统中编译所述软件的源码包,将编译后的源码包存储到指定位置。与现有技术相比,本发明能够为软件构建独立的编译环境,以便最大限度地减少外界环境的干扰,从而有效保证源码包的编写的正确性。
图4为本发明软件源码编译装置实施例二的结构示意图,如图4所示,本实施例的装置在图3所示装置结构的基础上,进一步地,所述软件源码编译装置还可以包括:
记录单元34,用于记录所述软件的源码包的编译过程。
可选地,在fedora中,所述创建单元31,用于根据软件发布版中提供的最小编译系统的RPM包列表,创建一个最小编译系统。
其中,在所述创建单元31创建最小编译系统之前,需要执行如下操作:
首先,为编译环境配置参数;
编译环境的配置参数可以包括:编译时chroot后用户的主目录、是否使用系统DNS、工作目录、编译超时、编译任务目录、目标平台、编译环境搭建的命令、发布版后缀、是否使用root cache、root cache目录、ccache加快重新编译时的速度、ccache大小、ccache目录、是否使用yum cache;
RPM编译相关的配置参数可以包括:编译的主机平台、cpu架构、打包时的vendor、编译的根目录、RPM包命名格式、打包者信息等。
然后,配置yum源;
其中,yum是一个软件包管理器,是为了解决Linux系统中特有的依赖关系问题而存在的。yum源相当于一个目录项,当使用yum机制安装软件时,若需要安装依赖软件,则yum机制会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好。yum从指定的地方,例如相关网站的RPM包地址或本地的RPM路径自动下载RPM包并且安装,能够很好的解决依赖关系问题。
yum的基本工作机制如下:
在服务器端,服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内;在客户端,如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件,通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
具体地,配置后续编译软件源码包时需要用到的各种参数和变量,后续需要安装的所有软件都从yum源中获取。
最后,运行run.sh脚本。
其中,run.sh脚本为一shell脚本,shell脚本可将多条命令编写到一个文件中,通过运行脚本文件即可完成指定的工作。常用于系统启动、程序编译等需要重复执行大量命令的场合。
可选地,所述编译单元32,用于使用chroot工具进入到所述最小编译系统中,只安装要编译的源码包的依赖包,并进行编译。
其中,所述chroot方式即change root,具体为:改变应用程序执行时所参考的根目录位置,编译完成后运行的所有程序都是指定的根目录下的程序。
本发明实施例提供的软件源码编译装置,为软件创建一个最小编译系统,以chroot方式在所述最小编译系统中编译所述软件的源码包,将编译后的源码包存储到指定位置。与现有技术相比,本发明能够为软件构建独立的编译环境,以便最大限度地减少外界环境的干扰,从而有效保证源码包的编写的正确性;此外,使用灵活,能根据需要保留编译环境。
上述软件源码编译装置实施例可以基于MIPS平台。
本发明实施例软件源码编译方法及装置,可以适用于在fedora中进行软件源码编译,但不仅限于此。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种软件源码编译方法,其特征在于,包括:
为软件创建一个最小编译系统;
以改变根目录chroot方式在所述最小编译系统中编译所述软件的源码包;
将编译后的源码包存储到指定位置。
2.根据权利要求1所述的方法,其特征在于,在所述将编译后的源码包放到指定位置之后,还包括:
记录所述软件的源码包的编译过程。
3.根据权利要求1所述的方法,其特征在于,在费多拉fedora中,所述为软件创建一个最小编译系统包括:根据软件发布版中提供的最小编译系统的红帽子包管理器RPM包列表,创建一个最小编译系统。
4.根据权利要求1所述的方法,其特征在于,所述以chroot方式在所述最小编译系统中编译所述软件的源码包包括:使用chroot工具进入到所述最小编译系统中,只安装要编译的源码包的依赖包,并进行编译。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法基于无内部互锁流水级的微处理器MIPS平台。
6.一种软件源码编译装置,其特征在于,包括:
创建单元,用于为软件创建一个最小编译系统;
编译单元,用于以改变根目录chroot方式在所述最小编译系统中编译所述软件的源码包;
存储单元,用于将编译后的源码包存储到指定位置。
7.根据权利要求6所述的装置,其特征在于,还包括:
记录单元,用于记录所述软件的源码包的编译过程。
8.根据权利要求6所述的装置,其特征在于,在fedora中,所述创建单元,用于根据软件发布版中提供的最小编译系统的RPM包列表,创建一个最小编译系统。
9.根据权利要求6所述的装置,其特征在于,所述编译单元,用于使用chroot工具进入到所述最小编译系统中,只安装要编译的源码包的依赖包,并进行编译。
10.根据权利要求6至9中任一项所述的装置,其特征在于,所述装置基于MIPS平台。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510239312.2A CN106293861A (zh) | 2015-05-12 | 2015-05-12 | 软件源码编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510239312.2A CN106293861A (zh) | 2015-05-12 | 2015-05-12 | 软件源码编译方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106293861A true CN106293861A (zh) | 2017-01-04 |
Family
ID=57630799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510239312.2A Pending CN106293861A (zh) | 2015-05-12 | 2015-05-12 | 软件源码编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293861A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457051A (zh) * | 2019-08-15 | 2019-11-15 | 浪潮云信息技术有限公司 | 一种自动化快速安装部署v语言编译环境的方法及系统 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN112948827A (zh) * | 2021-01-11 | 2021-06-11 | 杭州复杂美科技有限公司 | 一种源码编译验证方法、系统、设备和储存介质 |
CN113204347A (zh) * | 2021-04-02 | 2021-08-03 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101290581A (zh) * | 2008-05-16 | 2008-10-22 | 北京星网锐捷网络技术有限公司 | 编译系统及方法 |
CN103324474A (zh) * | 2013-05-22 | 2013-09-25 | 中标软件有限公司 | 基于Linux操作系统跨体系构造ISO的方法及模块 |
CN104268017A (zh) * | 2014-09-19 | 2015-01-07 | 福建升腾资讯有限公司 | 一种同时运行Android/Linux操作系统的方法 |
-
2015
- 2015-05-12 CN CN201510239312.2A patent/CN106293861A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101290581A (zh) * | 2008-05-16 | 2008-10-22 | 北京星网锐捷网络技术有限公司 | 编译系统及方法 |
CN103324474A (zh) * | 2013-05-22 | 2013-09-25 | 中标软件有限公司 | 基于Linux操作系统跨体系构造ISO的方法及模块 |
CN104268017A (zh) * | 2014-09-19 | 2015-01-07 | 福建升腾资讯有限公司 | 一种同时运行Android/Linux操作系统的方法 |
Non-Patent Citations (2)
Title |
---|
JIN-YANG: ""Linux Chroot"", 《HTTPS://JIN-YANG.GITHUB.IO/POST/LINUX-CHROOT.HTML》 * |
ODED: ""How to build a chroot jail environment for CentOS"", 《HTTPS://GEEK.CO.IL/2010/03/14/HOW-TO-BUILD-A-CHROOT-JAIL-ENVIRONMENT-FOR-CENTOS》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457051A (zh) * | 2019-08-15 | 2019-11-15 | 浪潮云信息技术有限公司 | 一种自动化快速安装部署v语言编译环境的方法及系统 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN111857730B (zh) * | 2020-07-24 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN112948827A (zh) * | 2021-01-11 | 2021-06-11 | 杭州复杂美科技有限公司 | 一种源码编译验证方法、系统、设备和储存介质 |
CN113204347A (zh) * | 2021-04-02 | 2021-08-03 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
CN113204347B (zh) * | 2021-04-02 | 2022-03-22 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
US9201632B2 (en) | Systems and methods for incremental software development | |
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN111090433B (zh) | 一种数据处理的方法、装置和存储介质 | |
CN110990020A (zh) | 一种软件编译方法、装置及电子设备和存储介质 | |
Dolstra et al. | NixOS: A purely functional Linux distribution | |
US10795659B1 (en) | System and method for live patching processes in user space | |
CN107943485B (zh) | 一种补丁编译平台及补丁编译方法 | |
US11074154B2 (en) | Identifying a source file for use in debugging compiled code | |
US20070156389A1 (en) | Dynamic adaptation of a configuration to a system environment | |
CN106293861A (zh) | 软件源码编译方法及装置 | |
Salvador et al. | Embedded Linux Development with Yocto Project | |
CN115629971A (zh) | 一种应用的开发系统和开发方法 | |
US20030182460A1 (en) | Managed code modules dynamically invoking unmanaged code modules at arbitrary locations | |
CN116991381B (zh) | 一种应用交叉编译方法、装置、计算设备及存储介质 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
US9235390B1 (en) | Application optimization for use based on feature popularity | |
CN110597514A (zh) | VxWorks下的程序发布系统 | |
CN109901852B (zh) | 基于Docker原生CentOS的CUDA的安装方法、装置及设备 | |
FR3105507A1 (fr) | Procédé et dispositif mettant en œuvre ce procédé pour générer et installer un code exécutable dans la mémoire d’un noyau d’une machine virtuelle depuis un hyperviseur | |
US11714609B2 (en) | Automatic generation of source code implementing a regular expression | |
Rodrigues et al. | Aspect-Oriented Webassembly Transformation | |
Ivanishin et al. | System-wide elimination of unreferenced code and data in dynamically linked programs | |
CN113672238B (zh) | 基于实时操作系统模块化管理的运行方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170104 |