loadlibrary

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

Описание

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. Заголовочный файл содержит оператор, #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 имя функции в shrlibsample MATLAB библиотека с именем псевдонима, 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'и вектор символов. Генерирует прототипный файл в текущей папке. Прототипное имя файла должно отличаться от имени библиотеки. Используйте этот файл вместо заголовочного файла при загрузке библиотеки.

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

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

свернуть все

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

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

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

Ограничения

  • У вас должен быть поддерживаемый компилятор 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