检查失败:GetOpGradFactory()-> insert({op,func})。second MapAccumulate的重复渐变

时间:2018-11-23 09:07:36

标签: c++ tensorflow modelica openmodelica

注意: 我也在https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it这里发布了这个问题,我希望也能与更多的人一起使用张量流经验。


我想在 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个函数时,它将正常编译,但会发生运行时错误:


stdout | 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的重复渐变< br />

stdout |错误

进程崩溃

标准输出|错误

进程崩溃了
模拟过程失败。以代码6退出。


这怎么可能?使用导致相同错误的3个函数,我无法在测试程序中执行任何操作。 OMC生成的可执行文件会对我做什么,而我不在测试程序中?

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方案,将/ usr / bin中的符号链接“ clang”指向“ gcc”。

有关说明,请检查https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it