Примечание: я также разместил этот вопрос здесь 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, если меня нет в моей тестовой программе?