You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件:

  1. 在.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
  1. 重新启动DDEV:ddev restart

方案二:手动生成libltdl.la文件(不推荐,仅临时场景使用)

如果你需要保留pecl install的流程,可以手动生成.la文件:

  1. 在Dockerfile或脚本中添加以下命令:
cd /usr/lib/x86_64-linux-gnu
libtool --mode=link gcc -o libltdl.la -rpath /usr/lib/x86_64-linux-gnu libltdl.a
  1. 再执行pecl install pdo_sqlsrv

注意:这种方式依赖libtool的旧特性,未来可能被Debian进一步移除,不建议长期使用。

内容的提问来源于stack exchange,提问作者user9147574

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:32:03