一、一般编 译开源库代码生成流程
发布时间:2022-12-21 11:28:27 所属栏目:Linux 来源:
导读: Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后再安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解
|
Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后再安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。 一、一般编译开源库代码生成流程 1、使用如下命令查看当前是否安装了gcc编译器,没有可以先用yum安装gcc gcc --version #查看是否安装gcc 2、解压源码包,例如: tar -xvf nginx-1.7.7.tar.gz #解压源码包 3、进入解压好的源码包: cd nginx-1.7.7 #进入源码包 4、执行configure文件,此文件有两个功能:1、让用户选定编译特性;2、检查编译环境。configure执行后将生成MakeFile文件。例如: ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf 其中我们通过--prefix制定了安装路径,通过--conf-path制定了配置文件的具体位置。注意:不是所有的程序的configure参数都是一样的 可以使用 ./configure --help查看详细参数说明。如果该程序所依赖的库在当前系统中没有安装,则会导致configure最后报错,遇到这种情况就需要你先安装依赖库。 如果是生产静态库或者动态库,则下面的操作不一样。同时,在交叉编译时,上面configure配置也是不一样的。 5、执行make命令,编译程序 make 6、编译成功后就可以安装了,执行如下命令 make install 到此程序就算安装完成了,但是不要忘了还有后续的配置。 二、Linux开源库的configure文件 configure它是个shell脚本,主要用于编译安装源代码库和软件。 ./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,比如加上 –with、–enable、–without、–disable 等等参数对编译加以控制,检查当前的环境是否满足要安装软件的依赖关系,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC。生成makefile文件,以便你可以用make和make install来编译和安装程序,最后运行make clean删除一些临时文件。 1、可以通过命令查看 就可以查看到所有的配置选项 ./configure --help 2、一般常用的配置如下 命令配置 含义 备注 --host=HOST 指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--host 指定的是交叉编译工具链的前缀。 --build=BUILD 指定软件包安装的系统平台,如当前我们是在intel的pentium机器中编译该系统,那么我们的--build就可能 是i686-pc-linux-gnulinux软件源,.如果没有指定,默认值将是'--host'选项的值。 --enable-FEATURE[=ARG] 相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它.这里'FEATURE'是特性的名字.一个特性可能会接受一个可选的参数.例如: ./configure --enable-buffers=128 --enable-FEATURE=no 与--disable-FEATURE'是同义的.例如 --enable-static:生成静态链接库 --enable-shared:生成动态链接库 注意生产的库文件可能在隐藏文件夹下你没有发现 --prefix=PREFIX 把软件安装到指定目录,例如 ./configure--prefix=/opt/mlterm 参考网址: 三、如何生成configure文件 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac” automake:将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换 为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它 会自己产生config.guess和config.sub。automake -a选项可以补齐文件config.guess,config.sub,install-sh,missing,depcomp。 autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。 111 执行步骤如下: $ sudo apt install automake autoconf $ autoscan $ mv configure.scan configure.ac $ aclocal $ autoconf $ autoheader $ automake --add-missing $ ./configure $ make 需要注意的举例文件如下: 1、Makefile.am Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./configure的时候,就将Makefile.in文件自动生成Makefile文件了。所以Makefile.am文件是比Makefile文件更高的抽象。如下为此次举例的文件内容。 里面也可以决定是否是生产什么样的文件,是可执行文件还是静态库或者动态库。 AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=hello hello_SOURCES=hello.cpp hello.h 参考网址: 2、configure.ac configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便),最基本的组成可以是下面的。 # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT(hello, 1.0, [email?protected]) AM_INIT_AUTOMAKE(hello, 1.0) AC_CONFIG_SRCDIR([hello.cpp]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 参考网址: 3、举例源码文件 /*hello.c*/ #include #include "hello.h" using namespace std; int main() { CHello a; return 0; } /*hello.h*/ #ifndef __HELLO_H__ #define __HELLO_H__ #include using namespace std; class CHello { public: CHello(){ cout<<"Hello!"< (编辑:我爱制作网_沈阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330576号