Linux下手工编译libiconv库的小问题

2023-06-19 22:36:35 浏览数 (1)

我的电脑是 Ubuntu 14.04 LTS, 自己手工编译 php5.6, 打开 ZEND_EXTRA_LIBS='-liconv' 时, 发现没有安装 libiconv, 也就是编码转换的库, 所以百度该库的安装方法, 如下:

下载:

代码语言:shell复制
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

解压:

代码语言:shell复制
$ tar -zxvf libiconv-1.14.tar.gz
$ cd libiconv-1.14.1

<!--more-->

安装:

代码语言:shell复制
$ ./configure --prefix=/usr/local
$ make
# make install

不过我make的时候出现了一个问题:

代码语言:txt复制
n file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
^
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
make: *** [all] Error 2

原因未明, 应该是软件的bug吧, 后来百度找到了 解决方法, 整理如下~

切换到srclib目录下:
代码语言:shell复制
$ cd srclib
修改stdio.in.h文件:
代码语言:shell复制
$ gedit stdio.in.h
定位到
代码语言:txt复制
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
这一行, 改成:
代码语言:c复制
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

注意粘贴完下面有两行 #endif, 别少复制了一行 #endif, 改完是这个样子滴~别忘了保存~

代码语言:c复制
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
#endif

保存, make 就可以了, make install 完别忘了

代码语言:shell复制
# ldconfig

记下来, 下次就不会忘记了~

0 人点赞