loadlibrary

Загрузка разделяемой библиотеки на С в 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'))

The 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'и вектор символов. Переопределяет имя тонкого файла по умолчанию.

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

свернуть все

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

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

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

Ограничения

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

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

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

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

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

Подробнее о

свернуть все

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

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

Тонкий файл

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

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

Совет

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

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

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