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-gnu,.如果没有指定,默认值将是'--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

 
   

 

参考网址:

https://blog.csdn.net/u010977122/article/details/52959098

三、如何生成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

参考网址:

https://blog.csdn.net/u013485792/article/details/51355668

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, admin@163.com)
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)

参考网址:

https://www.cnblogs.com/ranson7zop/p/8259679.html

3、举例源码文件

/*hello.c*/
#include <iostream>
#include "hello.h"

using namespace std;

int main()
{
    CHello a;
    return 0;
}


/*hello.h*/
#ifndef __HELLO_H__
#define __HELLO_H__

#include<iostream>
using namespace std;

class CHello
{
public:
    CHello(){ cout<<"Hello!"<<endl;}
    ~CHello(){ cout<<"Bye!"<<endl;}
};

#endif

参考网址:

https://www.cnblogs.com/bugutian/p/5560548.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值