Debian11的DDEV环境中pecl安装pdo_sqlsrv失败:缺失libltdl.la
解决DDEV+PHP8.1编译pdo_sqlsrv时缺失libltdl.la的问题
问题根源
Debian 11(Bullseye)开始,libltdl-dev包不再提供.la文件——这是Debian官方逐步淘汰libtool遗留产物的举措,现代编译系统通常不再依赖这类文件。但pecl install pdo_sqlsrv使用的旧版编译脚本仍在尝试读取libltdl.la,导致编译失败。
正确解决方法
方案一:手动编译pdo_sqlsrv,绕过.la文件依赖
这是最推荐的方式,无需依赖废弃的.la文件:
- 在
.ddev/web-build/Dockerfile中整合所有依赖安装和编译步骤:
ARG BASE_IMAGE FROM $BASE_IMAGE # 配置微软源并安装基础依赖 RUN apt-get update && apt-get install -y gnupg2 curl \ && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update \ && ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc unixodbc-dev libltdl-dev php8.1-dev \ && rm -rf /var/lib/apt/lists/* # 手动编译安装pdo_sqlsrv RUN pecl download pdo_sqlsrv \ && tar xzf pdo_sqlsrv-*.tgz \ && cd pdo_sqlsrv-* \ && phpize \ && ./configure --with-pdo-sqlsrv=/usr/lib/x86_64-linux-gnu \ && make && make install \ # 配置PHP加载扩展 && echo "extension=pdo_sqlsrv.so" > /etc/php/8.1/apache2/conf.d/20-pdo_sqlsrv.ini \ && echo "extension=pdo_sqlsrv.so" > /etc/php/8.1/cli/conf.d/20-pdo_sqlsrv.ini \ # 清理临时文件 && cd .. && rm -rf pdo_sqlsrv-* pdo_sqlsrv-*.tgz
- 重新启动DDEV:
ddev restart
方案二:手动生成libltdl.la文件(不推荐,仅临时场景使用)
如果你需要保留pecl install的流程,可以手动生成.la文件:
- 在Dockerfile或脚本中添加以下命令:
cd /usr/lib/x86_64-linux-gnu libtool --mode=link gcc -o libltdl.la -rpath /usr/lib/x86_64-linux-gnu libltdl.a
- 再执行
pecl install pdo_sqlsrv
注意:这种方式依赖libtool的旧特性,未来可能被Debian进一步移除,不建议长期使用。
内容的提问来源于stack exchange,提问作者user9147574
相关产品推荐
相关产品推荐

