Проверка не удалась: GetOpGradFactory () -> insert ({op, func}). Second Дублированный градиент для MapAccumulate - PullRequest
0 голосов
/ 23 ноября 2018

Примечание: я также разместил этот вопрос здесь https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it, и я надеюсь охватить большую группу с опытом в тензорном потоке.


Я хочу использовать Tensorflow C ++ API в Modelica Model .

Для этого я создал класс в C ++, который инкапсулирует детали Tensorflow.Кроме того, тот же файл содержит 3 функции (для вызова конструктора, деструктора и функции, которая использует существующий экземпляр моего класса. Эти функции объявляются как «extern» в соответствующем заголовочном файле (только если я прочитал компилятор C ++, яиспользуя __cplusplus для разграничения).

Затем я скомпилировал указанный файл (класс и 3 функции) в .so, используя g ++ (я использовал -fPIC и -shared). В / usr / lib,Я создал символическую ссылку на указанную библиотеку общих объектов.

(Для полноты я должен упомянуть, что у меня возникли проблемы с аннотациями «LibraryDirectory» и «IncludeDirectory». Поэтому я создал символические ссылки на содержимое всехкаталоги, которые я передавал в g ++ / gcc, используя -L и -I (для моей тестовой программы), прямо в каталоги Model / Resources / Library и Model / Resources / Include. Так как ошибок компиляции больше не было, я подумал, что это нормально.)

Теперь странная вещь:

Я могу использовать 3 функции в тестовой программе, скомпилированной с помощью gcс.Я связал его со всеми библиотеками Tensorflow (и libm, libstdc ++ и моим .so сверху), и он просто работает, как и ожидалось.Тем не менее, когда я пытаюсь использовать эти 3 функции в a) классе Modelica (конструктор и деструктор) и b) функции, использующей «внешний» вызов функции, она прекрасно скомпилируется, но возникает ошибка времени выполнения:


стандартный вывод |OMEditInfo |

/ tmp / OpenModelica_fred / OMEdit / TestCpp -port = 44382 -logFormat = xmltcp -override = startTime = 0, stopTime = 1, stepSize = 0.002, допуск = 1e-6, solver = dassl, outputFormat = mat, variableFilter =. * -r = TestCpp_res.mat -w -lv = LOG_STATS

stdout |ошибка |

2018-11-22 10: 47: 00.153977: F tenorflow / core / framework / function.cc: 1440] Проверка не удалась: GetOpGradFactory () -> insert ({op, func}). Second Дублированный градиент для MapAccumulate

стандартный вывод |ошибка |

Сбой процесса

stdout |ошибка |

Сбой процесса
Сбой процесса моделирования.Выход с кодом 6.


Как это возможно?Я не могу ничего сделать в моей тестовой программе с 3 функциями, что приводит к той же ошибке.Что может сгенерировать исполняемый файл OMC, если меня нет в моей тестовой программе?

1 Ответ

0 голосов
/ 23 ноября 2018

Я нашел решение, указывающее символическую ссылку "clang" в / usr / bin на "gcc".

Для инструкций, проверьте https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it.

...