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

.NET Core 3.1应用Ubuntu运行报错:无法加载gdi32.dll依赖

解决.NET Core 3.1在Ubuntu上运行System.Drawing.Common时的gdi32.dll加载失败问题

问题重现

运行应用时抛出错误:

System.DllNotFoundException: 无法加载共享库‘gdi32.dll’或其依赖项。为诊断加载问题,可设置LD_DEBUG环境变量:libgdi32.dll: 无法打开共享对象文件:没有那个文件或目录。

已尝试在Dockerfile中安装libgdiplus相关依赖,但问题未解决。

解决方案

1. 修正Dockerfile中的依赖安装与软链接配置

将原有的重复安装命令替换为以下完整命令,确保依赖安装完整并建立必要的软链接:

# 基于官方.NET Core 3.1 Ubuntu镜像构建
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-bionic

# 安装System.Drawing.Common所需依赖并创建软链接
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgdiplus \
    libc6-dev \
    libx11-dev \
    && ln -s /usr/lib/libgdiplus.so /usr/lib/gdi32.dll \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 复制应用程序文件
COPY ./publish/ /app/
WORKDIR /app

# 启动应用
ENTRYPOINT ["dotnet", "YourAppName.dll"]
  • 软链接ln -s /usr/lib/libgdiplus.so /usr/lib/gdi32.dll的作用是让.NET Core在Linux环境下找到对应gdi32.dll的替代库libgdiplus.so
  • 添加apt-get clean和rm -rf /var/lib/apt/lists/*可以减小镜像体积

2. 确认基础镜像兼容性

确保使用的基础镜像是Ubuntu版本的.NET Core 3.1运行时镜像(如3.1-bionic),而非Alpine镜像——Alpine使用musl libc,与System.Drawing.Common依赖的glibc不兼容,会导致依赖加载失败。

3. 验证依赖安装状态

构建镜像后,可进入容器执行以下命令验证libgdiplus是否安装成功:

ldconfig -p | grep libgdiplus

若输出包含libgdiplus.so的路径,则说明依赖安装正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:05:28