安装PHP7.3.5, gd扩展里面无法添加freetype
./configure --with-php-config=/opt/php7/bin/php-config --with-jpeg-dir --with-freetype-dir=/usr/local/freetype --enable-gd-native-ttf
都是
freetype-config not found
freetype-config not found
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 1
- 注册时间: 2019-05-19 18:48
- 系统: ubuntu19.04
-
- 帖子: 3
- 注册时间: 2012-02-08 18:21
Re: freetype-config not found
你好,我在编译安装时也遇到了这个错误。这个错误可能是 在 Ubuntu 19.04 中安装的 libfreetype6-2.9.1-3 https://packages.ubuntu.com/disco/libfreetype6 版本不兼容的问题。我尝试编译安装较旧的 freetype-2.8.1 ,PHP 7.3.5 编译安装成功。
1、先卸载已经通过 apt-get 安装的 libfreetype6 (同时也会移除 libfreetype6-dev 和其他软件包,无影响)
2、下载并编译安装旧版本的 freetype,freetype 亦可以在 SourcForge https://sourceforge.net/projects/freety ... pe2/2.8.1/ 上下载。
3、第三步很重要 编译安装的 freetype 需要在 include/freetype2 文件夹中建立向上一层的软连接。
4、最后编译安装 PHP 时请加上 --with-freetype-dir 参数
希望可以帮到你。
1、先卸载已经通过 apt-get 安装的 libfreetype6 (同时也会移除 libfreetype6-dev 和其他软件包,无影响)
代码: 全选
apt-get remove libfreetype6
2、下载并编译安装旧版本的 freetype,freetype 亦可以在 SourcForge https://sourceforge.net/projects/freety ... pe2/2.8.1/ 上下载。
代码: 全选
cd YOUR_DIR
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.8.1.tar.gz
tar zxvf freetype-2.8.1.tar.gz
cd freetype-2.8.1/
./configure --prefix=YOUR_PREFIX
make && make install
代码: 全选
ln -s YOUR_PREFIX/include/freetype2/freetype YOUR_PREFIX/include/freetype
ln -s YOUR_PREFIX/include/freetype2/ft2build.h YOUR_PREFIX/include/ft2build.h
代码: 全选
--with-freetype-dir=YOUR_PREFIX
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: freetype-config not found
我觉得你们两个没真正搞懂--with-freetype-dir的作用。它作为编译安装freetype库时指定的--prefix,php的configure会去运行所指定目录下面的bin/freetype-configdoopsky 写了: ↑2019-05-20 14:26 你好,我在编译安装时也遇到了这个错误。这个错误可能是 在 Ubuntu 19.04 中安装的 libfreetype6-2.9.1-3 https://packages.ubuntu.com/disco/libfreetype6 版本不兼容的问题。我尝试编译安装较旧的 freetype-2.8.1 ,PHP 7.3.5 编译安装成功。
对于系统上的freetype库而言,就是/usr。只要安装了libfreetype6-dev,/usr/bin/freetype-config就在那里了
没必要,只要freetype-config安装正确,用freetype-config --cflags运行就能得到正确的头文件目录,不需要再建立软链接
-
- 帖子: 3
- 注册时间: 2012-02-08 18:21
Re: freetype-config not found
astolia 版主你好,感谢你的认真回复。我也是初级 Ubuntu 使用者,绝大多数问题我自己也是通过 Google 搜索解决,已经通过我自己解决的问题,我也很高兴向大家分享。确实我解决问题的方法很拙劣,在此我也希望通过 Ubuntu 中文社区 向大家多多学习。
如果编译安装 FreeType 时,./configure 配置不使用 --prefix ,一般系统默认安装路径为 /usr/local 。这时编译安装 PHP 只需要使用 --with-freetype-dir 就可以。
我是经过测试,在 Ubuntu 19.04 (Disco) 中通过 apt-get 安装的 libfreetype6-dev 确实由于版本问题,导致 PHP 7.3.5 编译安装时出现 freetype-config not found 的问题。
并且我这不是个案:
https://www.bt.cn/bbs/thread-31210-1-1.html
https://oneinstack.com/question/18663/
我是通过这篇文章启发解决的:
https://blog.csdn.net/u012226330/articl ... s/17611749
最后感谢 astolia 版主的回复,希望今后能够向你多多学习。
首先我先解释一下,我在第二步编译安装 FreeType 时,已经指定了编译安装路径:
YOUR_PREFIX 代在第四步指定 --with-freetype-dir 的路径doopsky 写了: ↑2019-05-20 14:26
2、下载并编译安装旧版本的 freetype,freetype 亦可以在 SourcForge https://sourceforge.net/projects/freety ... pe2/2.8.1/ 上下载。
代码: 全选
cd YOUR_DIR wget http://download.savannah.gnu.org/releases/freetype/freetype-2.8.1.tar.gz tar zxvf freetype-2.8.1.tar.gz cd freetype-2.8.1/ ./configure --prefix=YOUR_PREFIX make && make install
PHP 文档中明确说明 https://www.php.net/manual/zh/image.installation.php ,增强 GD 的文字处理能力,要激活 FreeType 2 的支持,加上 --with-freetype-dir=DIR 。
如果编译安装 FreeType 时,./configure 配置不使用 --prefix ,一般系统默认安装路径为 /usr/local 。这时编译安装 PHP 只需要使用 --with-freetype-dir 就可以。
我是经过测试,在 Ubuntu 19.04 (Disco) 中通过 apt-get 安装的 libfreetype6-dev 确实由于版本问题,导致 PHP 7.3.5 编译安装时出现 freetype-config not found 的问题。
并且我这不是个案:
https://www.bt.cn/bbs/thread-31210-1-1.html
https://oneinstack.com/question/18663/
我亲自测试,不在 /usr/local 中安装 FreeType,会出现错误:
代码: 全选
ft2build.h : No such file or directory.
https://blog.csdn.net/u012226330/articl ... s/17611749
最后感谢 astolia 版主的回复,希望今后能够向你多多学习。
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: freetype-config not found
确实。这里我弄错了,19.04源里的libfreetype6-dev包里没有freetype-config。changelog http://changelogs.ubuntu.com/changelogs ... /changelog 里提到在2.9.1-1时,
要解决也很简单,主要思路就是用pkg-config代替freetype-config。pkg-config可能没有预先安装上,需要用sudo apt install pkg-config来安装- The `freetype-config' script is no longer installed by default
(Closes: #871470, #886461). All packages depending on libfreetype6-dev
should use pkg-config to find the relevant CFLAGS and libraries.
比如直接修改php的configure,在34506行有这么一段
代码: 全选
for i in $PHP_FREETYPE_DIR /usr/local /usr; do
if test -f "$i/bin/freetype-config"; then
FREETYPE2_DIR=$i
FREETYPE2_CONFIG="$i/bin/freetype-config"
break
fi
done
if test -z "$FREETYPE2_DIR"; then
as_fn_error $? "freetype-config not found." "$LINENO" 5
fi
FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags`
FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs`
代码: 全选
for i in $PHP_FREETYPE_DIR /usr/local /usr; do
if test -f "$i/bin/pkg-config"; then
FREETYPE2_DIR=$i
FREETYPE2_CONFIG="$i/bin/pkg-config"
break
fi
done
if test -z "$FREETYPE2_DIR"; then
as_fn_error $? "freetype-config not found." "$LINENO" 5
fi
FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG freetype2 --cflags`
FREETYPE2_LIBS=`$FREETYPE2_CONFIG freetype2 --libs`
从编译时头文件查找的原理来看,只要在编译freetype进行configure这步时设定的--prefix和最后安装的位置一致,php的--with-freetype-dir也一致,就不可能出这个问题。所以肯定你哪里弄错了。
你这点我是最不认同的,如果安装的是ubuntu桌面版,卸载掉libfreetype6的话,整个图形环境都会被卸载掉,不是你轻描淡写的“无影响”。
随便删除、降级系统默认安装的包本身就是存在风险的,能避免就避免。
-
- 帖子: 3
- 注册时间: 2012-02-08 18:21
Re: freetype-config not found
astolia 版主,你好:
感谢你的指点迷津,我当时是在最小化安装的 Ubuntu Server 19.04 中测试的,apt-get remove libfreetype6 后并没有什么问题,所以我就写了个”无所谓“,确实没在带有桌面环境下测试。
再通过 apt-get 安装的 libfreetype6-dev 下,通过替换 freetype-config 为 pkg-config 后,编译顺利通过。
编译安装PHP前,一共在两个文件中替换内容:
./configure
./ext/gd/config.m4
或者在 PHP 目录下使用以下命令:
再次表达感谢!
感谢你的指点迷津,我当时是在最小化安装的 Ubuntu Server 19.04 中测试的,apt-get remove libfreetype6 后并没有什么问题,所以我就写了个”无所谓“,确实没在带有桌面环境下测试。
再通过 apt-get 安装的 libfreetype6-dev 下,通过替换 freetype-config 为 pkg-config 后,编译顺利通过。
编译安装PHP前,一共在两个文件中替换内容:
./configure
./ext/gd/config.m4
或者在 PHP 目录下使用以下命令:
代码: 全选
cd php-7.3.5/
sed -i "s/freetype-config/pkg-config/g" ./configure
sed -i "s/freetype-config/pkg-config/g" ./ext/gd/config.m4
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: freetype-config not found
编译通过不代表你做正确了。
很明显你不了解pkg-config的功能,也没有仔细看我上面贴的两段代码的不同之处。pkg-config作为一个通用的配置工具,肯定不能直接替代freetype专用的freetype-config。
我上面贴出来了用到了freetype-config的全部地方,可以看到它有两种用法。一是检测freetype-config是否存在,二是执行freetype-config --cflags/--libs来获取编译/链接时的参数。
执行freetype-config --cflags/--libs 实际上就是在执行 pkg-config freetype2 --cflags/--libs。所以要想让它真正正常工作,还要在执行--cflags/--libs时给pkg-config指定包名freetype2。
至于你的错误改法为什么能编译通过,是因为单纯指定--with-freetype-dir并不会连带启用gd支持。所以根本就没有去编译./ext/gd下面的东西,有错误内容的FREETYPE2_CFLAGS和FREETYPE2_LIBS也没有得到应用。