Поиск и устранение проблем проблемы определения библиотеки C++

MATLAB не создал MLX Файл определения

Иногда, содержимое файлов библиотеки превышает пределы, который вызывает MATLAB® создать только M файл, но не MLX файл. Ищите свою выходную папку файл определения формы definelibNameM и отредактируйте содержимое, когда вы делаете MLX версия.

Не может открыться или слишком медленный, чтобы загрузить MLX Файл определения

Если у вас есть проблемы эффективности, открывающие MLX файл, затем можно использовать соответствующий definelibNameM файл вместо этого. Сначала удалите MLX файл, и затем открывает .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.

Почему функция или тип отсутствующий в файле определения?

Если библиотека содержит какие-либо неподдерживаемые функции языка или типы данных, то функциональность не включена в файл определения библиотеки.

Сгенерированное определение библиотеки файл MLX

Для получения информации о сообщениях об ошибке обратитесь к этому примеру. Подпись 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 функция, можно отредактировать файл определения библиотеки definelibname.mlx зафиксировать ошибку сборки. Ищите раздел OutputFolder and Libraries и заполните или измените libDef.Libraries переменная. Обязательно задайте полный путь и имя библиотеки. Сохраните файл, затем повторно выполнитесь build функция.

Похожие темы