今天就拿大数据存储组件hbase依赖白protobuf为例,讲解没有configure文件时如何编译安装软件包。
下载源码
git clone https://github.com/protocolbuffers/protobuf.git
切换到目标分支
git checkout v2.5.0
进入protobuf目录,查看源码中是否存在configure文件。
[root@0ded5b7d017c protobuf]# ll
total 300
-rw-r--r-- 1 root root 25307 Feb 27 03:02 CHANGES.txt
-rw-r--r-- 1 root root 3527 Feb 27 03:02 CONTRIBUTORS.txt
-rw-r--r-- 1 root root 1732 Feb 27 03:02 COPYING.txt
-rw-r--r-- 1 root root 9537 Feb 27 03:02 INSTALL.txt
-rw-r--r-- 1 root root 15189 Feb 27 03:02 Makefile.am
-rw-r--r-- 1 root root 5312 Feb 27 03:02 README.txt
-rwxr-xr-x 1 root root 1519 Feb 27 03:02 autogen.sh
drwxr-xr-x 2 root root 4096 Feb 27 03:06 autom4te.cache
drwxr-xr-x 2 root root 4096 Feb 27 03:02 benchmarks
-rw-r--r-- 1 root root 4829 Feb 27 03:02 configure.ac
drwxr-xr-x 2 root root 4096 Feb 27 03:02 editors
drwxr-xr-x 2 root root 4096 Feb 27 03:02 examples
-rwxr-xr-x 1 root root 1105 Feb 27 03:02 generate_descriptor_proto.sh
drwxr-xr-x 3 root root 4096 Feb 27 03:02 java
drwxr-xr-x 2 root root 4096 Feb 27 03:02 m4
drwxr-xr-x 2 root root 4096 Feb 27 03:02 more_tests
-rwxr-xr-x 1 root root 1689 Feb 27 03:02 post_process_dist.sh
-rw-r--r-- 1 root root 408 Feb 27 03:02 protobuf-lite.pc.in
-rw-r--r-- 1 root root 429 Feb 27 03:02 protobuf.pc.in
drwxr-xr-x 3 root root 4096 Feb 27 03:02 python
drwxr-xr-x 4 root root 4096 Feb 27 03:02 src
drwxr-xr-x 2 root root 4096 Feb 27 03:02 vsprojects
发现没有configure文件(configure.ac不是)
所以我们使用autoconf与automake命令生成configure文件。
使用yum安装autoconf软件
yum install -y autoconf
执行
autoconf
解决报错
[root@0ded5b7d017c protobuf]# autoconf
configure.ac:17: error: possibly undefined macro: AM_MAINTAINER_MODE
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:32: error: possibly undefined macro: AM_INIT_AUTOMAKE
configure.ac:49: error: possibly undefined macro: AM_CONDITIONAL
configure.ac:75: error: possibly undefined macro: AC_PROG_LIBTOOL
configure.ac:140: error: possibly undefined macro: AC_CXX_STL_HASH
为了解决上面autoconf执行报错,我们需要先安装automake
yum install -y automake
执行aclocal命令
aclocal
再次执行autoconf命令
这时就生成了configure文件。
可以使用下面文件来编译、安装了。
FAQ
1、如果碰到如“error: possibly undefined macro: AM_MAINTAINER_MODE”之类的错误,
则需要在autoconf之前运行aclocal命令,它会获取当前系统的环境,生成一个aclocal.m4的文件。
之后再运行autoconf。
接着运行automake --add-missing,生成install-sh和missing等。
2、如果这步出现required file `config.h.in' not found这样的错误,
则在运行automake前运行autoheader来生成这个文件。
3、如果出现src/Makefile.am:90: error: Libtool library used but 'LIBTOOL' is undefined这样的错误,
则在automake前运行libtoolize来生成这个文件。
4、执行./configure报错configure: error: C++ preprocessor "/lib/cpp" fails sanity check
因为缺少c++库文件导致,所以使用yum install gcc-c++命令安装即可解决。
全部命令顺序
aclocal
autoconf
libtoolize
autoheader
automake --add-missing
最后就可以用生成的configure和makefile来编译了。
./configure
make
make install
网友评论