MLX Файл определенияИногда, содержимое файлов библиотеки превышает пределы, который вызывает MATLAB® создать только M файл, но не MLX файл. Ищите свою выходную папку файл определения формы define и отредактируйте содержимое, когда вы делаете libNameMMLX версия.
MLX Файл определенияЕсли у вас есть проблемы эффективности, открывающие MLX файл, затем можно использовать соответствующий define файл вместо этого. Сначала удалите libNameMMLX файл, и затем открывает .m файл в редакторе MATLAB.
Когда вы используете аргумент, чтобы задать форму для другого аргумента, необходимо задать аргумент в подписи функции C++. В примере Сгенерированное Определение Библиотеки Файл MLX предположите, что вы задаете форму аргумента in в качестве аргумента inb:
defineArgument(taskDefinition, "in", "clib.array.libname.Int", "input", "inb");
Подпись C++ для функционального task не имеет аргумента inb.
void task(int* in, double* ind, int sz, char const* inc)
Для получения дополнительной информации о SHAPE значения, смотрите, Задают Недостающий Параметр SHAPE.
Когда вы используете аргумент, чтобы задать форму для другого аргумента, необходимо рассмотреть типы для обоих аргументов. В примере Сгенерированное Определение Библиотеки Файл MLX предположите что вы аргумент define inc как отключенная пустым указателем строка:
defineArgument(taskDefinition, "inc", "string", "input", "nullTerminated");
Если вы задаете форму аргумента ind в качестве аргумента inc, MATLAB отображает ошибку, потому что строка не может использоваться для числового типа.
defineArgument(taskDefinition, "ind", "clib.array.libname.Double", "input", "inc");
Для получения дополнительной информации о SHAPE значения, смотрите, Задают Недостающий Параметр SHAPE.
Если библиотека содержит какие-либо неподдерживаемые функции языка или типы данных, то функциональность не включена в файл определения библиотеки.
Для получения информации о сообщениях об ошибке обратитесь к этому примеру. Подпись C++:
void task(int * in, double * ind, int sz, char const * inc)
%taskDefinition = addFunction(libDef, ... % "void task(int * in,double * ind,int sz,char const * inc)", ... % "MATLABName", "clib.libname.task", ... % "Description", "clib.libname.task Representation of C++ function task."); % Modify help description values as needed. %defineArgument(taskDefinition, "in", "clib.array.libname.Int", "input", <SHAPE>); % <MLTYPE> can be "clib.array.libname.Int",or "int32" %defineArgument(taskDefinition, "ind", "clib.array.libname.Double", "input", <SHAPE>); % <MLTYPE> can be "clib.array.libname.Double", or "double" %defineArgument(taskDefinition, "sz", "int32"); %defineArgument(taskDefinition, "inc", <MLTYPE>, "input", <SHAPE>); % <MLTYPE> can be "clib.array.libname.Char","int8","string", or "char" %validate(taskDefinition);
undefined reference или unresolved external symbolКогда вы создаете интерфейс при помощи clibgen.generateLibraryDefinition или clibgen.buildInterface функции, компилятор может отобразить сообщения об ошибке о undefined reference или unresolved external symbol. Эти ошибки часто происходят, когда вы забываете предоставлять информацию о совместно использованных файлах библиотеки. Чтобы включать совместно использованные файлы библиотеки, используйте 'Libraries' аргумент значения имени.
Если вы уже вызвали clibgen.generateLibraryDefinition функция, можно отредактировать файл определения библиотеки define зафиксировать ошибку сборки. Ищите раздел OutputFolder and Libraries и заполните или измените libname.mlxlibDef.Libraries переменная. Обязательно задайте полный путь и имя библиотеки. Сохраните файл, затем повторно выполнитесь build функция.