【问题标题】:OpenModelica Fortran based External Function read\write error基于 OpenModelica Fortran 的外部函数读\写错误
【发布时间】:2021-08-03 12:24:56
【问题描述】:

我正在尝试将外部 FORTRAN 代码添加到 OpenModelica 1.13.0。我的函数和模型定义是正确的,并且 FORTRAN 代码正常工作。但是每当我向代码添加 write(*,*) 或 read(*,*) 方法时,我都会收到以下错误作为 OpenModelica Simulation 输出:

undefined reference to _gfortran_transfer_real_write@@GFORTRAN_1.4

我想知道如何解决这个问题。

谢谢。

【问题讨论】:

    标签: openmodelica


    【解决方案1】:

    这(可能)发生是因为您没有将 gfortran 与模拟链接。如果库是共享的(so、DLL、dylib),通常会自动处理依赖关系,因此您可能正在尝试链接静态库(.a)或目标文件(.o、.obj)。

    在您的外部函数中,添加注释 Library="gfortran" 或者因为您可能已经在其中添加了库,所以添加 Library={"mylib", "gfortran"}

    另请注意,OpenModelica 1.13 已经过时,应该升级。

    【讨论】:

    • 这里同样适用,因为在库中添加 gfortran 需要实际的 gfortran 在 Recources/Library 或 Modelica 搜索适当库的任何目录中可用。我实际上之前尝试过您的解决方案,但没有成功。
    【解决方案2】:

    对于 OMShell,可以调用 setCFlags("-lgfortran") 或在 OMEdit 中在 Simulation Setup > General > C/C++ Compiler Flags 添加 -lgfortran。它会解决这个问题。

    【讨论】:

    • 它不会解决使用相同 Modelica 库的其他人的问题,因为他们需要手动添加标志。使用 Library 注释,它应该可以在 OpenModelica 和其他工具中为任何使用该模型的人工作(前提是链接器路径上提供了正确的 gfortran)。
    • 问题是 gfortran 在链接器路径中并不总是可用的。我想可以修改源代码,以便在编译时始终添加 gfortran 链接,但到目前为止只有这种方法对我有用。
    • 如果添加 -lgfortran 有效,它应该可用。 OpenModelica 可能找​​不到它,但即使有警告,链接也应该有效
    • 好的,谢谢,我会检查它是否再次起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多