Здравствуйте, Undying, Вы писали:
U>Есть линуксовая static library (с расширением .a) и соответствующий ей заголовочный файл. Есть dotnet приложение, которое работает под linux с помощью Mono. Как в этом dotnet приложении можно использовать такую static library?
Оказалось довольно просто.
Создаем файл динамической библиотеки wrapper.c, который включает в себя заголочный файл статической библиотеки и функцию-заглушку, вызывающую какой-нибудь метод статической библиотеки, например:
#include "hasp_hl.h"
extern unsigned int check_login(unsigned int function_id, void *vendor_code)
{
hasp_handle_t handle = 0;
return hasp_login(function_id | HASP_PROGNUM_FEATURETYPE, vendor_code, &handle);
}
Собираем динамическую библиотеку:
gcc -shared wrapper.c libhasp_linux.a -lpthread -olibhasp_demo.so
-lpthread вроде опционально, если требует статическая библиотека. В wrapper.c должен быть хотя бы один вызов какой-нибудь функции статической библиотеки, иначе она не прилинкуется.
Полученную динамическую библиотеку нужно положить в /lib или /usr/lib, в папке программы работать не будет.
Далее все функции статической библиотеки будут доступны через DllImport:
[DllImport("libhasp_demo.so")]
static extern uint hasp_login(uint functionId, IntPtr vendorCodePtr, out uint handle);