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 имя функции в 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 Coder.

  • Интерфейс 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