使用CMake编译FMU适配NuGet Femyou遇问题求助
针对Femyou加载OpenModelica导出FMU失败的问题解答
问题1:修改CMakeLists.txt设置运行时依赖为"none"是否足够?
仅修改运行时依赖为"none"不够,还需要确保以下CMake配置正确:
- 输出文件名必须和FMU预期一致:比如你的场景中要确保生成的dll是
TestarFemyou.dll,不能因CMake目标设置导致文件名变更 - 强制指定64位架构:添加CMake参数
-A x64,保证生成的dll是64位(和你的OpenModelica、Femyou环境匹配) - 确保C接口编译:FMU的导出函数是C标准接口,需在CMake中设置
set(CMAKE_C_STANDARD 99),若使用C++源码,要加extern "C"包裹导出函数避免name mangling - 检查install路径:CMake的install步骤必须将生成的dll安装到FMU解压目录下的
binaries/win64路径,否则Femyou无法定位文件
问题2:Visual Studio 2017中的操作是否存在错误?
你的操作存在几个潜在问题:
- 构建目录选择错误:不要将构建二进制文件指向FMU解压目录,建议单独创建
build子目录(比如在FMU解压目录下新建build文件夹),避免源码、中间文件、输出文件混放导致冲突 - CMake版本兼容性问题:VS2017自带的CMake版本较旧,对CMP0177政策的处理可能存在缺陷,虽然Generate阶段能通过,但后续install步骤可能因路径规范化错误,导致dll无法复制到指定位置
- 架构未明确指定:默认配置可能生成32位dll,需在CMake配置时明确选择x64架构(CMake GUI的"Optional platform for generator"中选x64)
- 开发组件缺失:确保VS2017安装了完整的C开发组件,包括Windows SDK、VC工具集,否则无法编译生成原生dll
额外排查建议
- 优先检查OpenModelica导出FMU的设置:
- 选择与Femyou兼容的FMI版本(比如FMI 2.0,需确认Femyou支持版本)
- 导出时勾选"64-bit"选项,同时选择"独立"模式(避免依赖OpenModelica运行时库)
- 重编译时添加CMake参数:
-DCMAKE_BUILD_TYPE=Release:Debug版本dll可能带有额外调试依赖,Femyou加载易出错-Wno-dev:抑制CMP0177的开发警告,避免干扰配置过程
- 手动验证:构建成功后,将生成的dll手动复制到FMU的
binaries/win64目录,再测试Femyou加载
内容的提问来源于stack exchange,提问作者bea
相关产品推荐
相关产品推荐

