linux程序源码编译安装

本文介绍了源码编译安装的基本步骤,包括使用configure生成Makefile文件、利用make进行编译及makeinstall进行安装的过程。此外,还详细解释了如何通过pkg-config工具简化库文件路径配置,实现跨平台编译一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自


1. 安装基本步骤

1. ./configure

   建立Makefile 文件

2. make clean

   删除目标文件

3. make

    根据 Makefile 进行编译。 

   生成可执行文件, 可执行文件放在当前目录, 尚未被安装到预定安装目录中。

4. make install

    会根据Makefile 中的 install 选项, 将上一步编译完的数据安装到默认目录中。 

 2.1 configure

    在我们进行软件源码编译安装的过程中,首先要执行./configure

生成 Makefile,为下一步的编译做准备。可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。最终生成编译所需的Makefile文件供程序Make读入使用进而调用相关编译程式(通常调用编译程序都是gcc)来编译最终的二进制程序。而configure脚本在检查相应依赖环境时(例:所依赖软件的版本、相应库版本等),通常会通过pkg-config的工具来检测相应依赖环境。

    pkg-config用来检索系统中安装库文件的信息。典型的是用作库的编译和连接。一般来说,如果库的头文件不在/usr/include目录中,那么在编译的时候需要用-I参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的不同,造成了用-I参数指定的头文件的路径和在连接时使用-L参数指定lib库的路径都可能不同,其结果就是造成了编译命令界面的不统一。可能由于编译,连接的不一致,造成同一份程序从一台机器copy到另一台机器时就可能会出现问题。pkg-config 就是用来解决编译连接界面不统一问题的一个工具。它的基本思想:pkg-config是通过库提供的一个.pc文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。需要的时候可以通过pkg-config提供的参数(cflags,libs),将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc文件就可以准确定位,可以使用相同的编译和连接命令,使得编译和连接界面统一。

它提供的主要功能有:

<1> 检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。

<2> 获得编译预处理参数,如宏定义,头文件的路径。

<3> 获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。

<4> 自动加入所依赖的其他库的设置。

    举例:

 在默认情况下,每个支持 pkg-config 的库对应的.pc文件在安装后都位于安装目录中的lib/pkgconfig目录下。例如,我们在上面已经将Glib安装在/opt/gtk目录下了,那么这个Glib库对应的.pc文件是 /opt/gtk/lib/pkgconfig目录下一个叫glib-2.0.pc的文件: 

 prefix=/opt/gtk/exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/include

 glib_genmarshal=glib-genmarshalgobject_query=gobject-queryglib_mkenums=glib-mkenums

Name: GLib

Description: C Utility Library

Version: 2.12.13

Libs:-L${libdir}-lglib-2.0Cflags:-I${includedir}/glib-2.0-I${libdir}/glib-2.0/include

pkg-config list-all

列出所有可使用的包,位置在/usr/lib/pkgconfig ,此目录下都是各种.pc文件。/usr/local/lib/pkgconfig下面的libname.pc文件,新软件一般都会安装.pc文件,没有可以自己创建,并且设置环境变量PKG_CONFIG_PATH寻找.pc文件路径。

使用 pkg-config 的 –cflags 参数可以给出在编译时所需要的选项,而–libs 参数可以给出连接时的选项。例如,假设一个 sample.c 的程序用到了 Glib 库,就可以这样编译:

       $gcc-c`pkg-config--cflagsglib-2.0`sample.c

然后这样连接:

       $gccsample.o-osample`pkg-config--libsglib-2.0`

或者上面两步也可以合并为以下一步:

       $gccsample.c-osample`pkg-config--cflags--libsglib-2.0`

可以看到:由于使用了pkg-config工具来获得库的选项,所以不论库安装在什么目录下,都可以使用相同的编译和连接命令,带来了编译和连接界面的统一。


使用pkg-config工具提取库的编译和连接参数有两个基本的前提:

<1> 库本身在安装的时候必须提供一个相应的.pc文件。不这样做的库说明不支持pkg-config工具的使用。

<2> pkg-config必须知道要到哪里去寻找此.pc 文件。


PKG_CONFIG_PATH

    环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的,pkg-config按照设置路径的先后顺序进行搜索,直到找到指定的.pc 文件为止。这样,库的头文件的搜索路径的设置实际上就变成了对.pc文件搜索路径的设置。

    在安装完一个需要使用的库后,比如Glib,一是将相应的.pc文件,如glib-2.0.pc拷贝到/usr/lib/pkgconfig目录下,二是通过设置环境变量PKG_CONFIG_PATH添加glib-2.0.pc文件的搜索路径。

添加环境变量PKG_CONFIG_PATH,在bash中应该进行如下设置:

                $exportPKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH

    这样设置之后,使用Glib库的其它程序或库在编译的时候pkg-config就知道首先要到/opt/gtk/lib/pkgconfig这个目录中去寻找glib-2.0.pc(GTK+和其它的依赖库的.pc文件也将拷贝到这里,也会首先到这里搜索它们对应的.pc文件)。之后,通过pkg-config就可以把其中库的编译和连接参数提取出来供程序在编译和连接时使用。

    另外还需要注意的是:环境变量的设置只对当前的终端窗口有效。如果到了没有进行上述设置的终端窗口中,pkg-config将找不到新安装的glib-2.0.pc文件、从而可能使后面进行的安装(Glib之后的Atk的安装)无法进行。如果想让其永久生效,可以将环境变量写入/etc/profile中。

2.2 make

     这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perlpython编写的软件需要调用perlpython来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

     make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,比如 make install 一般表示进行安装,make uninstal 是卸载,不加参数就是默认的进行源代码编译。make  Linux 开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc ld 以及运行某些需要的程序进行编译的程序。一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。


2.3 make install

   这条命令来进行安装(当然有些软件需要先运行 make check make test来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)

   如何升级glibc

   我们在编译安装一些软件的时候,会提示你升级glibc,通过源码编译升级了glibc,但是发现还是报和原来一样的错,这是为什么呢?因为你升级源码编译安装的glibc,你在安装软件的时候,系统在检查依赖环境的时候,没有找到glibc相应的库,这时就需要你手动指定让系统找到glibc的库。假如你在安装glibc的时候,安装在/opt/glibc下,你可以直接设置pkg-config-puth的环境变量。

    $export=/opt/glibc/lib/pkgconfig.

     继续你的软件安装就可以了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值