PHP安装PDFTron后出现Segmentation Fault问题求助
问题
严格按照PDFTron官方文档在PHP环境中安装后,运行php命令直接触发段错误:
bash-5.1# php Segmentation fault (core dumped)
用于复现该问题的Dockerfile如下:
FROM php:7.4-fpm-alpine # persistent / runtime deps RUN apk add --no-cache \ make \ bash \ git \ gcc \ swig \ cmake \ gcompat \ $PHPIZE_DEPS \ ; # Install PDFTron WORKDIR /var/www RUN git clone https://github.com/PDFTron/PDFNetWrappers # Git clone the code. # Move to where we download PDFNet. WORKDIR /var/www/PDFNetWrappers/PDFNetC RUN wget http://www.pdftron.com/downloads/PDFNetC64.tar.gz # Download PDFNet. RUN tar xzvf PDFNetC64.tar.gz # Unpack PDFNet. RUN mv PDFNetC64/Headers/ . # Move PDFNet Headers/ into place. RUN mv PDFNetC64/Lib/ . # Move PDFNet Lib/ into place. # Go back up /PDFNetWrappers. WORKDIR /var/www/PDFNetWrappers RUN mkdir Build # Create a directory to create the Makefiles in. # Move to that directory. WORKDIR /var/www/PDFNetWrappers/Build #RUN apt-get install php-dev # add php-dev for required PHP include directories RUN cmake -D BUILD_PDFNetPHP=ON /var/www/PDFNetWrappers # Create the Makefiles with CMake. RUN make # Build the PHP wrappers with SWIG. RUN make install # Copy the PHP wrappers to where the samples can find them.
解决方法
排查libc兼容性问题
Alpine使用musl libc,而你下载的PDFNetC64.tar.gz是针对glibc编译的预编译包,两者不兼容会直接导致段错误。可以:- 替换基础镜像为基于glibc的发行版,比如
php:7.4-fpm(debian基础),并调整依赖安装命令为apt-get:FROM php:7.4-fpm RUN apt-get update && apt-get install -y --no-install-recommends \ make \ bash \ git \ gcc \ swig \ cmake \ php-dev \ && rm -rf /var/lib/apt/lists/* - 下载PDFTron针对musl编译的版本(如果提供),替换现有下载链接。
- 替换基础镜像为基于glibc的发行版,比如
调整CMake编译参数
如果坚持使用Alpine镜像,编译时添加musl兼容的编译选项:cmake -D BUILD_PDFNetPHP=ON -D CMAKE_CXX_FLAGS="-static-libstdc++ -D_GLIBCXX_USE_C99" /var/www/PDFNetWrappers验证扩展加载
make install会自动将PDFTron扩展加入PHP配置,若扩展本身编译有问题,会导致PHP启动崩溃。可以临时注释PHP配置中extension=PDFNetPHP.so这类行,再运行php -v测试,若正常则说明扩展是问题根源,需重新编译或更换兼容版本。
内容的提问来源于stack exchange,提问作者GrenierJ
相关产品推荐
相关产品推荐

