提问人:aahliffe 提问时间:4/28/2022 最后编辑:aahliffe 更新时间:4/29/2022 访问量:125
如何使用OpenModelica(linux)中的外部函数调用CoolProps共享库中的函数?使用 Fortran-77 包装器没有成功
How to use external functions in OpenModelica(linux) to call a function in the CoolProps Shared Library? Using a Fortran-77 wrapper didnt work out
问:
我在 CoolProp Sources 中试用了 Fortran Wapper
包装器中给出的示例 fortran 代码使用 CoolProp 中的函数 PropsSI。
double precision T,Q,D,h,s,P
character(LEN=32) Ref,Output, Name1, Name2
double precision outVal,Prop1,Prop2
integer inte
T = 400
Q = 1;
Output = "D"//CHAR(0)
Name1 = "Q"//CHAR(0)
Prop1 = Q
Name2 = "T"//CHAR(0)
Prop2 = T
Ref = "IF97::Water"//CHAR(0)
outval = 9999999
call PropsSi(Output, Name1, Prop1, Name2, Prop2, Ref, outVal)
我按照以下步骤在Modelica中调用上述函数:
- 构建了一个静态 Coolprop 库:在 CoolProp 的根目录下(也在我自己的软件包存储库中尝试过),我使用以下代码构建了一个静态库:
mkdir build && cd build
mkdir gccstatic && cd gccstatic
cmake ../.. -DCOOLPROP_STATIC_LIBRARY=ON -DCOOLPROP_EXTERNC_LIBRARY=ON -DCMAKE_VERBOSE_MAKEFILE=ON
cmake --build .
然后,代码中生成的库被移动到 modelica 包存储库中
- 将 fortran 文件链接到 Coolprop 共享库 libCoolProp.a。使用了多种方法,但逻辑是相同的:
f77 main.f -L. -lCoolProp
- 在 modelica 中使用 external 关键字调用函数
function propssi
extends Modelica.Icons.Function;
input Real T;
input Real Q;
output Real D;
protected
String out = "D";
String n1 = "Q";
String n2 = "T";
String ref= "IF97::Water";
external "FORTRAN 77" D = PropsSI(out, n1, Q, n2, T, ref) annotation(Library = {"testfunction"});
end propssi;
在以多种变体执行此操作后,我从 modelica 收到一个我无法弄清楚的编译错误。
/usr/bin/ld: /usr/local/lib/libCoolProp.a(CoolPropLib.cpp.o): 对符号“_ZTVN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3”的未定义引用 /usr/bin/ld:/lib/x86_64-linux-gnu/libstdc++.so.6:添加符号时出错:命令行中缺少 DSO clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) make: *** [UseFortran.makefile:37: omc_main_target] 错误 1 编译过程失败。退出,代码为 2。
任何人都可以建议替代方法来访问 coolprop 库函数或正确调用现有的 fortran 示例代码
答: 暂无答案
评论
_ZTVN10...
my_lib
my_lib
libCoolProp.a
-lmy_lib
_ZTVN10__cxxabiv121__vmi_class_type_infoE...
g++
clang