Linux下OpenModelica单独编译HelloWorld.om失败的原因
OpenModelica单独编译失败但脚本运行成功的原因
问题场景
- 环境:Linux
- HelloWorld.om文件内容:
class Main Real x(start = 1, fixed = true); parameter Real a = 1; equation der(x) = -a*x; end Main;
- 操作差异:
- 执行命令
omc --simulationCg HelloWorld.om时,返回错误并以退出码1终止,无法生成可执行文件 - 执行包含以下内容的
runHelloWorld.mos脚本(命令:omc runHelloWorld.mos)时,成功生成可执行文件并完成仿真:
- 执行命令
loadFile("HelloWorld.om"); simulate(Main, stopTime=2); plot(x);
原因分析
核心差异在于两个操作的执行流程完全不同:
--simulationCg参数的作用只是生成仿真所需的C代码,它不会自动调用系统的C编译器(如gcc)完成后续的编译、链接步骤。执行这个命令后,你只会在当前目录得到一个包含C源码的Main文件夹,但没有可执行文件,命令因未完成最终编译环节返回错误码1。simulate()函数是OpenModelica提供的完整仿真流程命令,它会依次执行:加载模型文件、生成仿真C代码、调用C编译器编译链接生成可执行文件、运行仿真这一系列完整步骤,因此能得到可执行文件并完成仿真。
验证方式
执行omc --simulationCg HelloWorld.om后,查看当前目录下的Main文件夹,里面会有Main.c、Main.h等源码文件,但没有Main可执行文件;而通过脚本运行后,该文件夹内会同时存在源码和编译好的可执行文件。
内容的提问来源于stack exchange,提问作者gkaf
相关产品推荐
相关产品推荐

