ArchLinux下如何编译绑定libjpeg-6b的PHP二进制文件
解决编译PHP时绑定指定版本libjpeg的方案
- 第一步:清理历史编译残留
先删除之前编译生成的缓存和中间文件,避免旧配置干扰:make clean rm -f config.cache - 第二步:配置编译优先级环境变量
强制编译和链接阶段优先检索你指定的libjpeg安装路径,注意将/path/libjpeg替换为你实际的libjpeg6b安装路径:
其中export CFLAGS="-I/path/libjpeg/include $CFLAGS" export LDFLAGS="-L/path/libjpeg/lib -Wl,-rpath=/path/libjpeg/lib $LDFLAGS" export PKG_CONFIG_PATH="/path/libjpeg/lib/pkgconfig:$PKG_CONFIG_PATH"-Wl,-rpath参数会将自定义库路径硬编码到生成的二进制文件中,运行时会优先从该路径加载依赖,跳过系统全局库路径。 - 第三步:重新执行configure与编译
沿用你之前的编译参数执行配置:
如果需要完全静态绑定libjpeg,不需要依赖外部so文件,可以在执行configure前修改LDFLAGS配置,优先链接静态库:./configure --with-gd --with-jpeg-dir="/path/libjpeg" && makeexport LDFLAGS="-L/path/libjpeg/lib -Wl,-rpath=/path/libjpeg/lib -l:libjpeg.a $LDFLAGS" - 第四步:验证依赖
编译完成后再次用ldd命令检查PHP二进制的依赖,正常应显示libjpeg.so.62指向你指定的安装路径,而非系统的libjpeg.so.8。
注意:如果你的libjpeg6b安装时未生成pkgconfig文件,可忽略PKG_CONFIG_PATH的配置,手动确认头文件和库文件路径正确即可,不要卸载系统全局的libjpeg包避免影响其他系统功能。
内容的提问来源于stack exchange,提问作者Mark Terence
相关产品推荐
相关产品推荐

