在linux下安装源码的步骤
在Linux下安装源码的步骤
在Linux下安装软件时,有时会遇到需要进行源码安装的情况。虽然只需要简单的三个步骤:./configure
、make
、sudo make install
,但这却让很多人感到头疼。在这里,我将以安装X11为例,详细介绍一下我在安装过程中的一些小经验,希望能够共同学习和进步!
首先,我们需要做一些准备工作。源码安装少不了几个工具,包括pkg-config
、libtool
、autoconf
和automake
(当然,还有一些更基础的工具,比如zlib
、m4
等,这里就不详细介绍了)。其中,pkg-config
是比较重要的工具,它用于向configure
程序提供系统信息,比如软件版本、库版本以及库路径等信息,这些信息仅在编译期间使用。你可以打开/usr/lib/pkgconfig
目录下的任意一个.pc
文件,就会发现类似下面的信息(以X11的.pc
文件为例):
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
xthreadlib=-lpthread
Name: X11
Description: X Library
Version: 1.3.3
Requires: xproto kbproto
Requires.private: xcb >= 1.1.92
Cflags: -I${includedir}
Libs: -L${libdir} -lX11
Libs.private: -lpthread
configure
程序就是依靠这些信息来判断软件版本是否符合要求的。接下来,让我们看看pkg-config
是如何工作的。默认情况下,pkg-config
首先在/usr/lib/pkgconfig/
目录中查找相关包(比如x11
)对应的.pc
文件,如果找不到,它还会在PKG_CONFIG_PATH
环境变量所指定的路径下查找。如果还是找不到,它就会报错。因此,我们可以通过以下方法解决在configure
时提示“库未找到”的问题:首先使用命令ldconfig -p | grep 库名
来分析该库是否已安装及其路径,如果返回为空,则说明该库确实未安装;否则,可以根据该命令的返回结果找到库的安装位置,然后设置其环境变量,命令如下:
export PKG_CONFIG_PATH=软件位置/lib/pkgconfig:$PKG_CONFIG_PATH
需要注意的是,安装软件后,.pc
文件通常位于安装目录下的lib/pkgconfig
中。这样设置的环境变量只在当前命令窗口中有效。当然,你也可以修改home
文件夹下的.bashrc
文件(.bashrc
是一个隐藏文件,可以使用命令vi .bashrc
进行编辑),在文件末尾添加上述命令,然后重新登录即可。对于其他几个工具,在Linux下同样是必不可少的。libtool
用于管理库文件,在未安装时会出现错误提示:possibly undefined macro: AC_PROG_LIBTOOL
。而autoconf
和automake
可用于在某些没有configure
的源码包安装时使用(比如pixman
就是一个典型的例子,安装了这两个工具后,直接运行./autogen.sh
即可进行安装)。
准备工作完成后,就可以开始安装了。以下是具体的命令:
tar vxf libX11-6.2.1.tar.gz
cd libX11-6.2.1
mkdir X11-build
cd X11-build
../configure –prefix=/usr/local/X11R6
make
sudo make install
这里有一些良好的安装习惯可以积累:1、建立一个临时编译目录,本例中为X11-build
,这样在安装完成后可以删除该目录,以节省空间,并保持源码目录的整洁;2、最好将安装目录指定在同一个文件夹下,本例中为/usr/local/X11R6
,这样有几个相关的安装文件可以放在同一个文件夹中,便于管理。否则,默认情况下,所有文件都会安装在/usr/local
下,显得杂乱无章;3、在编译完成后进行检查,本例中使用了echo $
命令,表示检查上一条命令的退出状态。如果程序正常退出,返回值为0;如果错误退出,返回值为非0。也可以使用make check
命令,主要是为了防止在make
失败后直接进行install
,从而避免出现一些莫名其妙的错误。此外,还有一种更方便快捷的安装方法,即使用&&
将安装命令连接起来,例如../configure –prefix=**&&make&&sudo make install
。这样,只有在前面的命令执行正确的情况下,后面的任务才会执行,非常方便!
除了上述内容,安装之前可以阅读源码包中的readme
和install
等文档,通常会提供所需软件及其下载地址,还包括一些安装技巧和配置选项。此外,在运行configure
之前,可以先输入configure --help
命令,查看可添加的选项。还有几个与安装成功相关的东西,例如ldconfig
。如果在安装过程中提示找不到某个库,或者在编译时提示找不到*.so
文件,就需要用到它了。最简单的解决办法是使用sudo gedit /etc/ld.so.conf
命令,在文件中添加*.so
文件所在路径,然后运行ldconfig
命令即可。不过,我对这个东西有些阴影,不知道是因为使用了虚拟机还是其他原因,有7、8次在运行完ldconfig
后,Ubuntu就无法打开任何窗口,甚至无法进入系统,非常崩溃。不知道是否有高手能够提供解决办法。在这里,我提供一种替代ldconfig
的方法,即使用export LD_LIBRARY_PATH=*.so文件地址:$LD_LIBRARY_PATH
命令。使用这种方法,我感到更加安心,尽管稍微麻烦一些,但总比系统崩溃要好得多,呵呵!实