From 2183b81a0f9f0ebf46f969805bd89e4a3322960f Mon Sep 17 00:00:00 2001 From: tp <1799149022@qq.com> Date: Mon, 12 May 2025 10:35:35 +0800 Subject: [PATCH] 2 --- Dockerfile | 10 +++++++--- Fortran/1.json | 5 +++-- Fortran/1.xlsx | Bin 10888 -> 10912 bytes Services/FortranInteropService.cs | 10 +++++----- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index c87e12b..b4a9b2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,10 @@ # ===== 第一阶段:构建阶段 ===== FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +# 配置 NuGet 使用国内镜像源 +RUN dotnet nuget add source https://mirrors.cloud.tencent.com/nuget/ \ + && dotnet nuget disable source nuget.org + # 配置 apt-get 使用 apt-cacher-ng 作为代理 RUN echo 'Acquire::http::Proxy "http://192.168.1.140:3142";' > /etc/apt/apt.conf.d/01proxy @@ -28,7 +32,7 @@ WORKDIR /src/Fortran RUN for file in *.f90; do gfortran -fPIC -c "$file" -o "${file%.f90}.o"; done # 链接所有 .o 文件为共享库 -RUN gfortran -shared *.o -o libMSJGMX.so +RUN gfortran -shared *.o -o libfortran_function.so # 回到主工作目录 WORKDIR /src @@ -45,7 +49,7 @@ RUN dotnet publish -c Release -o /app/publish # 复制编译好的 .so 文件到发布目录 RUN mkdir -p /app/publish && \ - cp /src/Fortran/libMSJGMX.so /app/publish/ + cp /src/Fortran/libfortran_function.so /app/publish/ # ===== 第二阶段:运行阶段 ===== FROM mcr.microsoft.com/dotnet/aspnet:8.0 @@ -72,7 +76,7 @@ WORKDIR /app COPY --from=build /app/publish . # 确保 .so 文件的权限正确 -RUN chmod 755 /app/libMSJGMX.so +RUN chmod 755 /app/libfortran_function.so # 设置 LD_LIBRARY_PATH ENV LD_LIBRARY_PATH=/app diff --git a/Fortran/1.json b/Fortran/1.json index fcc71f9..148137d 100644 --- a/Fortran/1.json +++ b/Fortran/1.json @@ -1,8 +1,9 @@ { "fortranSourceFile": "D:\\\u5DE5\u4F5C2025\\\u7B97\u6CD5\u5E73\u53F0\\dll\\\u9A6C\u65AF\u4EAC\u8DDF\u6A21\u578B\\MSJGMX\\MSJGMX\\MSJGMX - \u526F\u672C.f90", - "fortranFunctionName": "MSJGMX", + "fortranFunctionName": "fortran_function", "projectName": "FortranWebApi", "outputDirectory": "D:\\\u5DE5\u4F5C2025\\\u7B97\u6CD5\u5E73\u53F0\\\u8F93\u51FA\u5E93\\\u9A6C\u65AF\u4EAC\u8DDF\u6A21\u578B", + "cmbLanguage": "", "parameters": [ { "name": "FILELEN", @@ -71,7 +72,7 @@ { "name": "P", "dataType": "Float", - "arrayType": "OneDimensional", + "arrayType": "TwoDimensional", "direction": "Input", "description": "", "isSelected": true diff --git a/Fortran/1.xlsx b/Fortran/1.xlsx index 16e8bf82dba8ec778197f14b054be04e280834ad..b7dbb866df202d8cae1932e7c87abdebd76826b1 100644 GIT binary patch delta 5584 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 { - if (name == "libMSJGMX.so") + if (name == "libfortran_function.so") { // 尝试从当前目录加载 string currentDir = Directory.GetCurrentDirectory(); - string libraryPath = Path.Combine(currentDir, "libMSJGMX.so"); + string libraryPath = Path.Combine(currentDir, "libfortran_function.so"); if (File.Exists(libraryPath)) { @@ -32,8 +32,8 @@ namespace FortranWebApi.Services } // DllImport声明 - [DllImport("libMSJGMX.so", CallingConvention = CallingConvention.Cdecl, EntryPoint = "MSJGMX")] - private static extern void MSJGMX( + [DllImport("libfortran_function.so", CallingConvention = CallingConvention.Cdecl, EntryPoint = "fortran_function")] + private static extern void fortran_function( ref int FILELEN, ref int NODE, ref int M, @@ -111,7 +111,7 @@ namespace FortranWebApi.Services // 调用Fortran函数 - MSJGMX( + fortran_function( ref FILELEN, ref NODE, ref M,