【发布时间】:2018-11-23 09:07:35
【问题描述】:
注意: 我也在这里https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it 发布了这个问题,我希望也能接触到更多具有 TensorFlow 经验的群体。
我想在 Modelica 模型中使用 Tensorflow C++ API。
为此,我在 C++ 中创建了一个封装了 Tensorflow 细节的类。 此外,同一个文件包含 3 个函数(调用构造函数、析构函数和一个使用我的类的现有实例的函数。这些函数在各自的头文件中声明为“extern”(仅当由 C++ 编译器读取时,我是使用 __cplusplus 来区分)。
然后我使用 g++ 将所述文件(类和 3 个函数)编译为 .so(我确实使用了 -fPIC 和 -shared)。在 /usr/lib 中,我创建了一个指向所述共享对象库的符号链接。
(为了完整起见,我应该提到我在使用“LibraryDirectory”和“IncludeDirectory”注释时遇到了问题。这就是为什么我创建符号链接到我将使用 -L 传递给 g++/gcc 的所有目录的内容和 -我(对于我的测试程序)直接进入 Model/Resources/Library 和 Model/Resources/Include 目录。由于没有更多的编译错误,我认为这没关系。)
现在奇怪的是:
我可以在用 gcc 编译的测试程序中使用这 3 个函数。我将它与所有 Tensorflow 库(以及上面的 libm、libstdc++ 和我的 .so)链接起来,它按预期工作。 但是,当我尝试在 a) Modelica 类(构造函数和析构函数)和 b) 使用“外部”函数调用的函数中使用这 3 个函数时,它可以正常编译,但会出现运行时错误:
标准输出 | OMEditInfo |
/tmp/OpenModelica_fred/OMEdit/TestCpp -port=44382 -logFormat=xmltcp -override=startTime=0,stopTime=1,stepSize=0.002,tolerance=1e-6,solver=dassl,outputFormat=mat,variableFilter= .* -r=TestCpp_res.mat -w -lv=LOG_STATS
标准输出 |错误 |2018-11-22 10:47:00.153977: F tensorflow/core/framework/function.cc:1440] 检查失败:GetOpGradFactory()->insert({op, func}).second MapAccumulate 的重复梯度
标准输出 |错误 |
进程崩溃
标准输出 |错误 |进程崩溃
模拟过程失败。以代码 6 退出。
这怎么可能?我无法在我的测试程序中使用导致相同错误的 3 个函数执行任何操作。如果我不在我的测试程序中,OMC 生成的可执行文件会对它们做什么?
【问题讨论】:
标签: c++ tensorflow modelica openmodelica