首页 > 解决方案 > 无法在 Linux 上的 .NET 应用程序中加载动态库

问题描述

无法在 Linux 上加载动态库

System.DllNotFoundException: Unable to load shared library 'mylibrary' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable: dlopen(libmylibrary, 1): image not found

编辑 1
下面是用于创建容器的 Dockerfile

FROM streetcred/dotnet-indy AS base
WORKDIR /app

# Expose the default port
EXPOSE 5000

COPY SomeProject/ ./

RUN dotnet restore "SomeProject.csproj"
RUN dotnet build "SomeProject.csproj" -c Release -o build
RUN dotnet publish "SomeProject.csproj" -c Release -o build
RUN COPY libmylibrary.dylib build/libmylibrary.dylib
RUN COPY libmylibrary.so build/libmylibrary.so
CMD dotnet build/SomeProject.dll --urls http://0.0.0.0:5000

编辑2
我尝试了以下,但我得到了同样的错误


编辑 3
基于@paladin324 的评论,我尝试了以下操作,但我得到了同样的错误

LD_LIBRARY_PATH=/app/SomeProject/build
cd /app/SomeProject/build
dotnet SomeProject.dll --urls http://0.0.0.0:5000

标签: .netdockervisual-studio-macdynamic-library

解决方案


.NET 使用平台的命名约定。 DllImport("myLibrary")将寻找一个名为libmylibrary.so(二进制文件的原始文件名)的文件。尝试改变:

RUN COPY mylibrary.so build/mylibrary.so

RUN COPY mylibrary.so build/umylibrary.so

推荐阅读