linux不使用cmake 编译OpenCV_网络设备

本发明涉及计算机软件技术领域,更具体地,涉及一种快速移植编译开源程序的方法。

背景技术:

目前,Linux的发行版就是将Linux核心与应用软件做一个打包,较知名的有:RedHat、Debain、SuSE、Ubuntu等,用户可以通过各发行版linux内核的安装包管理工具(apt-get、yum)安装自己需要软件程序,简单方便的从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

Linux的非发行版本一般是只有Linux核心及少量常用的可执行程序,需要使用的额外软件程序则无法直接安装,需要自己手动进行编译开源程序获取。现在的网络设备由于自主开发用户态程序,一般选择使用简洁小巧的非发行版本内核,通过使用标准gcc或自定义交叉编译工具编译标准Linux内核源码的方式。

如此,带来的问题是在开发过程中需要一些开源程序或库文件时就需要使用标准gcc或自定义交叉编译工具编译所需的开源程序或库文件源码,有些开源代码版本较多或比较难下载到,而一些功能复杂的开源程序或库文件源码在编译时又可能依赖于很多其他开源程序或库文件,如此可能会因为要编译一个开源程序或库文件而需要编译其他好几个开源程序或库文件,且编译过程中的各种报错解决尤为让人头痛,费时费力。

由于不同的开源程序的复杂程度不同,移植起来的困难程度也不同,并且大部分开源程序在设计时没有考虑移植问题。

在现有技术中,拿到要移植开源程序的源码包之后,首先要连接开源程序的功能和实现方法,并分析开源程序的依赖关系:(1)硬件相关;(2)它依赖什么特定的函数库,比如glibc;(3)是否依赖特定的高层图形类库,比如gtk;(4)依赖特定的软件,比如GUI程序依赖的X server。

另外,开源程序依赖很多其他函数库,比如gtk软件必须要有gtk库的支持,为了程序的编译和运行,必须首先将这些函数库移植过来。更困难的是需要修改源代码,假如源码里有很多硬件相关的代码,比如汇编指令,不同体系结构的指令集不同。可能不仅仅是一条条指令对应那么简单,因为目标平台可能没有对应功能的指令并且在不同平台上软件运行到汇编代码处时各个寄存器的意义不相同。另一个方法是如果可以用C代码将汇编段的功能模拟出来,那就用c代码代替汇编代码。从而使得整个移植编译的过程异常复杂,费时费力,并且极度依赖于操作人本身的技术能力,普及化不够。

技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的快速移植编译开源程序的方法。

根据本发明的一个方面,提供一种快速移植编译开源程序的方法,所述方法包括:在发行版本Linux系统中编译或者安装开源程序;移植到非发行版本Linux内核系统上运行。

其中,所述方法进一步包括:

步骤1,在虚拟机上安装发行版本Linux系统的编译机,作为编译和移植开源程序的编译机;

步骤2,搜索开源程序的安装包进行安装,将安装好的可执行程序导出上传到执行网络设备中;

步骤3,运行所述可执行程序,将运行所需的库文件或者其他依赖文件上传到所述执行网络设备的对应目录;

步骤4,将导出的所有可执行程序及库文件放到Linux文件系统的对应目录下,打包编译进Linux内核镜像文件中,重新上传到执行网络设备。

其中,所述方法进一步包括:

步骤5,在所述编译机中安装网络设备内核编译工具,编译开源码并且配置所需开源库或依赖程序,编译后将可执行程序上传到执行网络设备验证,编译到内核文件系统。

其中,所述步骤1进一步包括:

步骤11,搭建发行版本Linux系统的编译机;

步骤12,根据当前所使用的非发行版本Linux内核的架构类型、32\64位及内核版本信息,选择相同或类似的发行版本Linux内核系统在虚拟机上进行安装,作为编译和移植开源程序的编译机。

其中,所述步骤2进一步包括:

步骤21,根据所需开源程序的名称在编译机中使用安装管理工具进行安装包搜索;

步骤22,根据搜索到的安装包信息选择所需版本进行安装操作;

步骤23,安装完成后在根目录下查找到安装程序所在位置,将该可执行程序导出并上传到需要运行该程序的网络设备中。

其中,所述步骤3进一步包括:

步骤31,运行上传到执行网络设备上的所述可执行程序;

步骤32,根据提示信息将运行时缺少的库文件或其他依赖程序搜索导出,并上传到网络设备的对应目录,直到可执行程序运行成功。

其中,所述步骤32进一步包括:

根据所需库文件或者其他依赖程序的名称在编译机中使用安装管理工具进行搜索;

步骤22,根据搜索到的信息选择其他依赖程序的所需版本进行安装操作;

步骤23,安装完成后在根目录下查找到库文件或者其他依赖程序所在位置,将该库文件和其他依赖程序的可执行程序导出并上传到需要运行该程序的网络设备中。

其中,所述步骤5进一步包括:

步骤51,在所述编译机中安装编译网络设备内核所使用的标准gcc或自定义交叉编译工具,以使编译工具一致;

步骤52,在所述编译机中将下载的开源码上传并解压,源码编译过程中安装使用所提示缺少的开源库或依赖程序;

步骤53,编译完成后将生成的可执行程序导出并上传到网络设备上验证,运行正常情况下将生成的可执行程序打包编译进内核文件系统。

本申请公开了一种快速移植编译开源程序的方法,通过在发行版本Linux系统中编译或安装开源程序,然后移植到非发行版本内核系统上,解决非发行版本内核无法直接安装开源程序的问题,避免了编译开源程序又依赖于很多其他程序或库文件情况下的麻烦,节省大量的时间和人力。

附图说明

图1为根据本发明实施例的一种快速移植编译开源程序的方法的总流程图;

图2为根据本发明实施例的一种快速移植编译开源程序的方法的流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

本发明公开了一种快速移植编译开源程序的方法,如图1所示,图1为根据本发明实施例的一种快速移植编译开源程序的方法的总流程图,通过在发行版本Linux系统中编译或安装开源程序,然后移植到非发行版本内核系统上,解决非发行版本内核无法直接安装开源程序的问题,避免了编译开源程序又依赖于很多其他程序或库文件情况下的麻烦,节省大量的时间和人力。

总的来说,如图2所示,图2为根据本发明实施例的一种快速移植编译开源程序的方法的流程图。本申请提供的方法包括:步骤1,在虚拟机上安装发行版本Linux系统的编译机,作为编译和移植开源程序的编译机;步骤2,搜索开源程序的安装包进行安装,将安装好的可执行程序导出上传到执行网络设备中;步骤3,运行所述可执行程序,将运行所需的库文件或者其他依赖文件上传到所述执行网络设备的对应目录;步骤4,将导出的所有可执行程序及库文件放到Linux文件系统的对应目录下,打包编译进Linux内核镜像文件中,重新上传到执行网络设备。

具体地,该方法包括如下步骤。

S1,搭建发行版本Linux系统的编译机;根据当前所使用的非发行版本Linux内核的架构类型、32\64位及内核版本信息选择相同或类似的发行版本Linux内核系统在虚拟机上进行安装,作为编译和移植开源程序的编译机;

S2,根据所需开源程序的名称在上述编译机中使用安装管理工具进行安装包搜索(如yum search flashrom),然后根据搜索到的安装包信息选择自己所需的版本进行安装操作(如yum install flashrom),安装完成后在根目录下通过find命令查找到安装程序所在位置(find/-name flashrom),然后将该可执行程序导出并上传到需要运行该程序的网络设备中;

S3,运行上传到网络设备上的可执行程序,根据提示信息将运行时缺少的库文件或其他依赖程序按照S2步骤搜索找到导出,并上传到网络设备的对应目录(一般可执行程序放/bin目录,库文件放/lib目录),直到可执行程序运行成功;

S4,将导出的所有可执行程序及库文件放到Linux文件系统的对应目录下,打包编译进Linux内核镜像文件中,重新上传到网络设备,保证移植的可执行程序及库文件重启不丢失。

S5,另外,对于有些开源程序按照上述步骤依然无法运行成功的,则必须选择编译开源码的方式。此时需要在所述编译机中安装编译网络设备内核所使用的标准gcc或自定义交叉编译工具,保证编译工具一致;然后在所述编译机中将下载的开源码上传并解压,进行源码编译过程中提示缺少的开源库或依赖程序,可直接通过安装管理工具直接搜索安装使用,减少编译的工作量。编译完成后将生成的可执行程序导出并上传到网络设备上验证,运行正常情况下将生成的可执行程序打包编译进内核文件系统。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。