我正在尝试调用在我的 Modelica 模型中使用 GLPK(GNU 线性编程工具包)的外部 C 代码。 C 代码工作得很好,已经在独立模式下对其进行了测试,其中所有输入都是自提供的。 当我尝试将它与我的 Modelica 模型链接时,它开始给我链接器类型错误,类似于以下内容:

examples.SimpleSystemOptimalDispatch_functions.c:(.text+0x99d): undefined reference to `glp_set_row_bnds'

我注意到要在独立模式下运行 C 代码,必须使用特殊的链接器

gcc standalonecode.c -lglpk -o standalone

我相信问题出在链接过程中,但我无法掌握如何告诉 Modelica 自动进行链接。 知道如何在 Modelica 中解决这个链接问题吗?

谢谢你和最好的祝福

#1楼 票数:1

您没有使用特殊的链接器。 -lglpk只是告诉链接器将您的可执行文件与glpk库( libglpk )链接起来。

现在,Modelica 有一个可用性问题——其中很多——而且事实上没有简单的方法可以告诉 Modelica“这是我的 C 文件,这是我需要的动态库,试一试”只是更糟糕事情的预兆先。

你必须做的是将你的代码编译成一个动态库,然后这个动态库将传递性地libglpk依赖项。

g++ -fPIC -shared -lglpk -o libmyCode.so myCode.c

#2楼 票数:1 已采纳

我设法解决了这个问题。

我所做的是:

  1. 编译位于 /usr/local/include/ 中的 glpk.h 使用
gcc -c glpk.h -o libglpk.o
  1. 使用@ReinstateMonica 的回答,我将 .c 文件变成了 .so
gcc -fPIC -shared -lglpk -o liblinprog.so st_linprog.c
  1. 在我的 Modelica 中的 function.mo 中,我将注释如下
annotation(Library ={"linprog","glpk"},
           LibraryDirectory="modelica://SolarTherm/Resources/Include/lib");

我的理解是,由于我的 st_linprog.c 依赖于 libglpk,那么为了使 Modelica 能够使用 libglpk 运行,我必须编译 glpk.h 并将 st_linprog.c 转换为共享库。 在 st_linprog.c 转换为共享库期间,-lglpk 标志确保共享库链接到 libglpk(我认为)。

如果你们有更优雅的方法,请在这里分享! 干杯,

菲尔

  ask by philgun translate from so

未解决问题?本站智能推荐:

1回复

将状态C计算与Modelica集成

我将用C实现的机器学习算法与在OpenModelica中运行的Modelica模型集成在一起。 机器学习算法处于闭环状态,将与目标状态的偏差作为输入,并提供控制信号作为输出。 我设置了一个采样周期,以便仅每X毫秒调用一次C算法。 但是,我看到针对同一时钟值多次调用了该算法。 这使我
1回复

Modelica-如何最好地将大型数组从.CSV文件或.MAT文件移动到外部C对象?

我正在使用 Open Modelica。 我有大量 .csv 格式或 .mat 格式的浮点数(~4,000,000 个数字)(它们对我来说同样方便)。 我使用 ExternData 包 (.csv) 或使用 Modelica.Utilities.Streams.readRealMatrix (.ma
1回复

是否可以使用内部/外部全局设置类型并将其替换?

问题描述 我想在经济建模(例如系统动力学)中使用非SI单位进行时间建模。 虽然我当然可以去秒 (s),然后用displayUnit有我的知识来修改displayUnit在系统建模,其中我主要使用时间没有很好的方式。 因此,在编写库时,我希望用户选择一个称为ModelTime的全局typ
2回复

在JModelica中引用外部文件

我有一个Modelica文件,该文件在仿真过程中通过外部库* .a文件引用了c代码。 例如: 在OpenModelica中打开Modelica模型时,所需文件似乎会自动加载,因为它会模拟并给出适当的结果。 但是,当我尝试使用JModelica-SDK-1.12编译Modelica文件
1回复

找不到(Modelica内部/外部)的相应内部声明

我最近开始使用Modelica(OpenModelica)作为建模工具,并且在使用内部/外部功能时遇到了一个问题。 我正在尝试创建一个包含环境温度和压力值的环境模型,以便其他模型可以使用该值。 我尝试使用内部关键字和外部关键字来执行此操作,但始终收到以下警告: 找不到组件.Real c
2回复

Modelica中外部表的N维(线性)插值

我想扩展Modelica标准库类型ExternalCombiTable1D和ExternalCombiTable2D提供的功能,以在外部数据表(保存的)上实现N维(线性)插值(“ N”至少为4,最多可能为8)。在txt数据文件上)。 最好的方法是什么?
1回复

用于处理FMU的C/C++库

你知道是否有一个C库来处理FMU并运行模拟,包括一个好的求解器? 据我所知,有: 来自QTronic的FMUSDK 来自Modelon的FMI库 两者都可以打开FMU,但只允许运行FMU与简单的Euler求解器进行协同仿真。 包括处理不连续性但不在C中的良好解算器的库包括
1回复

在Modelica中使用ThermoPower库

我对Modelica完全陌生,因此目前我可能还不完全了解该主题。 我正在尝试使用ThermpoPower 2.1库,但是它无法在我拥有的OpenModelica软件上运行。 我进行了一些谷歌搜索,搜索结果表明该库与Modelica 2.2兼容。 好吧,我有最新版本的OpenModelic