loadlibrary

Загрузите совместно использованную библиотеку C в MATLAB

Синтаксис

loadlibrary(libname,hfile)
loadlibrary(libname)
loadlibrary(libname,hfile,Name,Value)
loadlibrary(libname,@protofile)
[notfound,warnings] = loadlibrary(___)

Описание

Функции загрузок loadlibrary(libname,hfile) от C совместно использовали библиотеку libname, заданную в заголовочном файле hfile в MATLAB®. Функция loadlibrary только поддерживает функции вызова, которые являются вызываемыми от C и заголовочных файлов, которые могут быть проанализированы компилятором C. Функции, написанные в C++, должны быть объявлены как extern "C".

пример

loadlibrary(libname) загружает библиотеку, если имя заголовочного файла совпадает с именем файла библиотеки.

пример

loadlibrary(libname,hfile,Name,Value) загружает библиотеку с одним или несколькими аргументами Name,Value.

пример

loadlibrary(libname,@protofile) использует прототипный файл, protofile, вместо заголовочного файла.

[notfound,warnings] = loadlibrary(___) возвращает предупреждение информации и может включать любой из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Добавьте путь к папке examples.

addpath(fullfile(matlabroot,'extern','examples','shrlib'))

Отобразите функции в библиотеке.

if not(libisloaded('shrlibsample'))
    loadlibrary('shrlibsample')
end
libfunctions('shrlibsample')
Functions in library shrlibsample:

addDoubleRef              exportedDoubleValue       printExportedDoubleValue  
addMixedTypes             getListOfStrings          readEnum                  
addStructByRef            multDoubleArray           stringToUpper             
addStructFields           multDoubleRef             
allocateStruct            multiplyShort             
deallocateStruct          print2darray              

Очистка.

unloadlibrary shrlibsample

Предположим, что у вас есть библиотека, mylib, с заголовочным файлом, mylib.h h. Заголовочный файл содержит оператор, #include header2.h h. Чтобы использовать функции, определяемые в header2.h, вызовите loadlibrary с опцией addheader.

loadlibrary('mylib','mylib.h','addheader','header2')
if libisloaded('shrlibsample')
    unloadlibrary('shrlibsample')
else
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
end

Создайте имя псевдонима lib для библиотеки shrlibsample.

loadlibrary('shrlibsample','shrlibsample.h','alias','lib')

Вызовите функциональный stringToUpper с помощью имени псевдонима.

str = 'This was a Mixed Case string';
calllib('lib','stringToUpper',str)
ans = 
'THIS WAS A MIXED CASE STRING'

Очистка.

unloadlibrary lib

Добавьте путь к папке, содержащей shrlibsample и его заголовочный файл, shrlibsample.h h.

addpath(fullfile(matlabroot,'extern','examples','shrlib'))

Заголовочный файл shrlibsample.h включает заголовочный файл, shrhelp.h h. Если shrhelp.h находится в различной папке, например, c:\work, используйте опцию 'includepath', чтобы сказать MATLAB, где найти файл.

loadlibrary('shrlibsample','shrlibsample.h','includepath','c:\work')

Очистка.

unloadlibrary shrlibsample

Этот пример показывает, как заменить имя функции addMixedTypes в библиотеке MATLAB shrlibsample с именем псевдонима, addTypes. Чтобы задать имя псевдонима, создайте прототипный файл, затем загружают библиотеку с помощью прототипного файла в качестве заголовочного файла.

Используйте папку, для которой у вас есть доступ для записи.

cd('c:\work')

Создайте прототипный файл, mxproto.m m.

hfile = fullfile(matlabroot,'extern','examples','shrlib','shrlibsample.h');
[notfound,warnings] = loadlibrary('shrlibsample',hfile,'mfilename','mxproto')

MATLAB создает прототипный файл в текущей папке. Проигнорируйте предупреждающие сообщения.

Добавьте имя псевдонима к прототипному файлу. Откройте файл в редакторе MATLAB.

edit mxproto.m

Ищите функциональный addMixedTypes.

Следующий оператор присваивает псевдоним addTypes.

fcns.alias{fcnNum}='addTypes';

Добавьте оператор к строке перед оператором, чтобы постепенно увеличить fcnNum. Новый прототип функции, с новым оператором, показанным полужирным, похож на следующее:

%  double addMixedTypes ( short , int , double ); 
fcns.thunkname{fcnNum}='doubleint16int32doubleThunk';
fcns.name{fcnNum}='addMixedTypes'; 
fcns.calltype{fcnNum}='Thunk'; 
fcns.LHS{fcnNum}='double'; 
fcns.RHS{fcnNum}={'int16', 'int32', 'double'};
fcns.alias{fcnNum}='addTypes'; % Alias defined
fcnNum=fcnNum+1; % Increment fcnNum

Перезагрузите shrlibsample с помощью прототипного файла.

unloadlibrary shrlibsample
loadlibrary('shrlibsample',@mxproto)

Вызовите функцию ее именем псевдонима.

calllib('shrlibsample','addTypes',int16(127),int32(33000),pi)
ans = 3.3130e+04

Очистка.

unloadlibrary shrlibsample

Входные параметры

свернуть все

Имя разделяемой библиотеки, заданной как вектор символа. Имя является чувствительным к регистру и должно совпадать с файлом в вашей системе.

В системах Microsoft® Windows® libname относится к имени совместно использованного файла библиотеки (.dll). В системах Linux® это отсылает к имени общего объекта (.so) файл. На Apple системы Mac это относится к динамической разделяемой библиотеке (.dylib). Если вы не включаете расширение файла с аргументом libname, loadlibrary пытается найти библиотеку или с соответствующим расширением файла MEX платформы или с соответствующим расширением библиотеки платформы. Для списка расширений файла MEX используйте mexext.

MATLAB извлекает фрагмент имени libname, чтобы идентифицировать библиотеку в других разделяемых библиотечных функциях. Например, когда вы вызываете функцию calllib, не включайте путь или расширение файла на имя аргумента библиотеки.

Типы данных: char

Имя заголовочного файла C, заданного как вектор символа. Имя является чувствительным к регистру и должно совпадать с файлом в вашей системе. Если вы не включаете расширение файла в имя файла, loadlibrary использует .h для расширения.

Типы данных: char

Имя прототипного файла, заданного как вектор символа. Имя является чувствительным к регистру и должно совпадать с файлом в вашей системе. @protofile задает указатель на функцию к прототипному файлу. При использовании прототипного файла единственным допустимым аргументом пары Name,Value является alias.

Типы данных: char

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: loadlibrary ('mylib', 'mylib.h', 'addheader', 'header2')

Заголовочный файл, заданный как пара, разделенная запятой, состоящая из 'addheader' и вектора символа. Задайте имя файла без расширения файла.

Каждый файл, заданный addheader, должен иметь соответствующий оператор #include в основном заголовочном файле. Чтобы загрузить только функции, определяемые в заголовочном файле, который вы хотите использовать в MATLAB, используйте addheader.

MATLAB не проверяет существование заголовочных файлов и игнорирует любого, которые не необходимы.

Альтернативное имя для библиотеки, заданной как пара, разделенная запятой, состоящая из 'alias' и вектора символа. Сопоставляет указанное имя с библиотекой. Все последующие вызовы функций MATLAB, которые ссылаются на эту библиотеку, должны использовать этот псевдоним, пока библиотека не разгружена.

больше пути поиска файлов для зависимых заголовочных файлов — заголовочные файлы в заголовочных файлах, заданных как пара, разделенная запятой, состоящая из 'includepath' и вектора символа.

Моделируйте файл, заданный как пара, разделенная запятой, состоящая из 'mfilename' и вектора символа. Генерирует прототипный файл в текущей папке. Прототипное имя файла должно отличаться от имени библиотеки. Используйте этот файл вместо заголовочного файла при загрузке библиотеки.

Преобразуйте файл, заданный как пара, разделенная запятой, состоящая из 'thunkfilename' и вектора символа. Заменяет имя файла преобразователя по умолчанию.

Выходные аргументы

свернуть все

Имена функций, искавших в заголовочных файлах, но отсутствующий в библиотеке, возвращенной как массив ячеек.

Типы данных: ячейка

Предупреждения, произведенные при обработке заголовочного файла, возвращенного как символьный массив.

Ограничения

  • У вас должен быть поддерживаемый компилятор C, и Perl должен быть доступным.

  • Не вызывайте loadlibrary, если библиотека уже находится в памяти. Чтобы протестировать это условие, вызовите libisloaded.

  • loadlibrary не делает вспомогательных библиотек, сгенерированных MATLAB Compiler продукт SDK™.

  • Интерфейс MATLAB Shared Library не делает функций вспомогательной библиотеки с входными параметрами указателя функции.

  • Для получения дополнительной информации смотрите Ограничения к Разделяемой Поддержке Библиотеки.

Больше о

свернуть все

Анализ прототипа файла

Прототипный файл является файлом команд MATLAB, которые можно изменить и использовать вместо заголовочного файла.

Преобразование файла

Файл преобразователя является уровнем совместимости к 64-битной библиотеке, сгенерированной MATLAB. Именем файла преобразователя является BASENAME_thunk_COMPUTER.c, где BASENAME является или именем разделяемой библиотеки или, если задано, прототипным именем mfilename. COMPUTER является текстом, возвращенным функцией computer.

MATLAB компилирует этот файл и создает файл BASENAME_thunk_COMPUTER.LIBEXT, где LIBEXT является совместно использованным расширением библиотеки зависимого платформой значения по умолчанию, например, dll на Windows.

Советы

  • Если вы имеете больше чем один файл библиотеки того же имени, загружаете первое использование имени файла библиотеки. Затем загрузите дополнительные библиотеки с помощью опции alias.

  • Используйте опцию alias в качестве альтернативного названия для библиотеки. Чтобы загрузить альтернативный заголовочный файл, используйте @protofile аргумент.

Представлено до R2006a

Была ли эта тема полезной?