Я пишу программу автоматической оценки под Linux. В MATLAB написано несколько оценщиков, поэтому я хочу связать их все вместе и позволить учащимся запускать программу для выполнения задания, а затем выбирать задание. Я использую основную программу C++, к которой затем подключены mcc-скомпилированные библиотеки MATLAB.
В частности, моя программа читает файл конфигурации для имен различных программ Matlab и другой информации. Затем он использует эту информацию, чтобы представить выбор ученику. Итак, если назначение изменяется, добавляется или удаляется, все, что вам нужно сделать, это изменить файл конфигурации.
Идея состоит в том, что затем программа вызывает правильную библиотеку Matlab, которая была скомпилирована с помощью mcc. Но это означает, что библиотеки должны быть перекомпилированы, если грейдер меняется. Хуже того, вся программа должна быть перекомпилирована, если оценщик добавлен или удален. Итак, я хотел бы, чтобы одна простая, неизменная библиотечная функция Matlab напрямую вызывала m-файлы грейдера. В настоящее время у меня есть такая библиотека, которая использует eval для строки, переданной ей из основной программы.
Проблема в том, что когда я это делаю, видимо, mcc поглощает m-код грейдера в себя; изменение кода грейдера m после компиляции не имеет никакого эффекта. Я хотел бы, чтобы этого не произошло. Мне было доведено до сведения, что Mathworks может не захотеть, чтобы я мог это сделать, поскольку он может полностью обойти Matlab. Это не мое намерение, и я был бы доволен решением, требующим полной установки Matlab.
Мое возможное решение состоит в том, чтобы использовать mex-файл для основной программы или заставить основную программу вызывать библиотеку mcc, которая затем вызывает mex-файл, который затем вызывает соответствующий оценщик. Причина, по которой я сомневаюсь в первом решении, заключается в том, что я не уверен, сколько изменений мне придется внести в мой код, чтобы он заработал; мой код написан на C++, а не на C, что, как мне кажется, все усложняет. Однако второе решение может быть более сложным и в конечном итоге иметь ту же проблему.
Итак, какие мысли по этой ситуации? Как мне это сделать?