Замечания:
Я также разместил этот вопрос здесь 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 and Model / Resources / Include. Поскольку ошибок компиляции больше не было, я подумал, что это нормально.)
Теперь странная вещь:
Я могу использовать 3 функции в тестовой программе, скомпилированной с помощью gcc. Я связал его со всеми библиотеками 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, решатель = dassl, outputFormat = mat, variableFilter =. * — — r = TestCpp_res.mat -w -lv = LOG_STATS
стандартный вывод | ошибка |
2018-11-22 10: 47: 00.153977: F tenorflow / core / framework / function.cc: 1440] Ошибка проверки: GetOpGradFactory () ->insert ({op, func}). second Дублированный градиент для MapAccumulate
стандартный вывод | ошибка |
Процесс потерпел крах
стандартный вывод | ошибка |
Процесс потерпел крах
Процесс моделирования не удался. Выход с кодом 6.
Как это возможно? Я не могу ничего сделать в моей тестовой программе с 3 функциями, что приводит к той же ошибке. Что может сгенерировать исполняемый файл OMC, если я не в моей тестовой программе?
Я нашел решение, указывающее символическую ссылку «clang» в / usr / bin на «gcc».
Для инструкций, проверьте https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it .
Других решений пока нет …