exponenta event banner

loadlibrary

Загрузка общей библиотеки C в MATLAB

Описание

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

пример

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. Файл заголовка содержит инструкцию, #include header2.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.

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

shrlibsample.h файл заголовка включает в себя файл заголовка, shrhelp.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.

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 аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

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

Файл заголовка, указанный как разделенная запятыми пара, состоящая из 'addheader«и вектор символов». Укажите имя файла без расширения.

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

MATLAB не проверяет наличие файлов заголовков и игнорирует ненужные файлы.

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

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

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

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

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

свернуть все

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

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

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

Ограничения

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

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

  • loadlibrary не поддерживает библиотеки, созданные компилятором MATLAB SDK™ и продукты генерации кода, такие как MATLAB Coder.

  • Интерфейс общей библиотеки MATLAB не поддерживает библиотечные функции со входами указателей функций.

  • Дополнительные сведения см. в разделе Ограничения поддержки общих библиотек.

Подробнее

свернуть все

Файл прототипа

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

Файл Thunk

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

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

Совет

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

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

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