Как использовать линуксовую static library в dotnet'е?
От: Undying Россия  
Дата: 26.12.08 05:12
Оценка: 2 (2)
Есть линуксовая static library (с расширением .a) и соответствующий ей заголовочный файл. Есть dotnet приложение, которое работает под linux с помощью Mono. Как в этом dotnet приложении можно использовать такую static library?
Как использовать линуксовую static library в dotnet'е?
От: Undying Россия  
Дата: 16.01.09 09:32
Оценка: 10 (2)
#Имя: FAQ.dotnet.mono+static_library
Здравствуйте, 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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.