LINUX.ORG.RU

Возможно ли сделать .so обертку над .dll через winelib без исходников

 , , ,


3

4

Есть dll библиотека написанная на си, исходников нет. Есть следующие файлы от библиотеки: .dll, .h, .lib. Возможно ли сделать обертку над .dll через winelib?

Уже пробовал что-то подобное сделать, создав новый dll проект, который является оберткой над библиотекой, после чего пытался собрать это всё через winelib, но неудачно.

Ответ на: комментарий от freaks338

Ну так wine тоже на linux, собирай под wine запускай на linux через wine.

Есть вот такое https://github.com/taviso/loadlibrary но я не пробовал, судя по описанию то что тебе надо

У тебя есть заголовочные файлы библиотеки, не знаю что за либа, но может на основе заголовков самому написать реализацию и освободится от dll рабства приобщившись к so пастве =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

mittorn вроде знает как дергать дллки с линуксов

xDShot ★★★★★
()

DLLки очень часто (почти всегда) подтягивают кучу других DLL, так что вероятность подтянуть одну DLL не подтянув половину вайна достаточно невелика. Так что КМК проще не сношать мозг а дергать её из виндовых программ через вайн.

no-dashi-v2 ★★★
()

Есть загрузчик win32codecs в mplayer, но он только под i386. Там хидеры очень старого wine и минимальный набор стабов со врапперами. Я задействовал это в xash3d для загрузки игрового кода от модов, собранных под windows. Вроде какое-то время были патчи вроде win64codecs или amd64codecs,но это со временем стало всем не нужно, можно покопать. Ещё может в ndiswrapper что-то есть подходящее. загрузка windows x64 dll в amd64 linux бинаре меня пока не интересовала. Касательно wine - боюсь что стабильного механизма нет и придётся писать реализации под разные мажорные версии wine. Если тебе нужны именно отдельные библиотеки линуксовые, можно собрать приложение через winelib и грузить им линуксовые .so, но не забывай про то, что дефайны будут виндовые и хидеры от линуксовых библиотек могут немного сконфьюзиться - для уверенности тебе лучше описать API вручную, да и memory model там разная - lp64 v.s llp64, потому лучше даже сделай сошку, которая будет грузить линуксовые либы и с ними общаться, а интерфейс с ней уже напиши сам, гарантировано без использования long и каких-то локальных системных типов

mittorn ★★★★★
()

winelib - для того, что бы собрать сорцы завязанные на winapi под linux. Если ты хочешь работать с бинарником, тебе нужно откуда-то содрать загрузчик.

Либо то, что на житхабе товарищ из гугла сделал, либо из wine’а самому выковыривать или искать выковырянное.

Есть ещё один способ на самом деле, но он не подойдёт, если либа делает что-то сильно высоко-производительное:

  1. Пишем клиента для библиотеки и собираем его под windows
  2. В клиенте для библиотеке поднимаем сервер поверх любого разумного IPC, я бы начал с сокетов
  3. Пишем либу под gnu/linux которая умеет запускать сервер(который клиент библиотеки) и подключаться к нему и транслирует свой API в обращения к серверу

Если грамотно выбрать протокол для RPC то, в принципе, для 99% задач, это решение будет самым простым и достаточно эффективным.

Не подойдёт если речь про:

  • кодеки
  • криптографию
  • видеографику
  • низкоуровневые рассчёты
  • любые другие вещи содержащие функции работающие меньше 100мкс за вызов
faq2
()

Реверс может попробовать?

GREAT-DNG ★★★★
()

Да, это возможно. Подобным образом работают мосты для виндовых аудио плагинов (VST) в Linux.

m0rph ★★★★★
()

Есть следующие файлы от библиотеки: .dll, .h, .lib

А что все зациклились на DLL?! Я бы в первую очередь ковырял бы lib.

anonymous2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.