Dll библиотеки для linux

Dll библиотеки для linux

Здравствуйте, Alexey_VL, Вы писали:

>Пытась найти ответ на winehq.org, но пока безуспешно.

Сам сейчас поэксперементировал, получилось вот что.
Нашел в интернете готовую Windows DLL — из руководства, как делать DLL в Windows (http://www.flipcode.com/archives/Creating_And_Using_DLLs.shtml).
Взял оттуда код, который загружает DLL и выполняет из неё функции, немного подрихтовал и получил вот что:

Собирать при помощи вот такой команды:

На выходе будет файл с названием dllrun.exe, запускать его.

От: Alexey_VL
Дата: 19.10.09 09:58
Оценка:
От: Sheridan
Дата: 19.10.09 10:35
Оценка:

Приветствую, Alexey_VL, вы писали:

Можно озвучить — для чего? Что в той длл такого?

От: Alexey_VL
Дата: 19.10.09 11:07
Оценка:

S>Можно озвучить — для чего? Что в той длл такого?

В DLL драйвер под Виндос для устройства на СОМ-порте, который можно самостоятельно написать и под Linux, но это потребует времени. Задача как можно быстрее начать работать с устройством для демонстрации оного. В дальнейшем уже можно будет сделать нормально, написав драйвер под Linux. Ну и вообще для общего развития интересно — неужели нет проги-эмулятора, позволяющей работать с виндовскими длл-ками в Линуксе, с учетом существования WINE

От: rising_edge
Дата: 19.10.09 11:13
Оценка:

Здравствуйте, Alexey_VL, Вы писали:

S>>Можно озвучить — для чего? Что в той длл такого?

A_V>В DLL драйвер под Виндос для устройства на СОМ-порте

А оная DLL небось через драйвер COM-порта работает? И как вы собираетесь виндовой DLL лазить в устройство через линуксовый драйвер COM-порта?

От: Sheridan
Дата: 19.10.09 11:17
Оценка:
От: LuciferSaratov
Дата: 19.10.09 11:24
Оценка:

Здравствуйте, Alexey_VL, Вы писали:

A_V>Я так понимаю, что мне winelib не подойдет, потому что у меня Linux-приложение, которое я не могу скомпилировать как виндовское с помощью Winelib. Исходников dll-ки у меня тоже нет.

Насколько я понимаю, вот эти самые winegcc и wineg++ никоим образом не запрещают использовать обычные линуксовые библиотеки и системные вызовы. Т.е. если собирать программу при помощи winegcc, то можно использовать как WinAPI, так и линуксовые API.
Код, необходимый для инициализации WINE, winegcc генерирует сам.

От: Alexey_VL
Дата: 19.10.09 11:32
Оценка:

_>А оная DLL небось через драйвер COM-порта работает? И как вы собираетесь виндовой DLL лазить в устройство через линуксовый драйвер COM-порта?

Хм, а собственно почему виндовой? Я так понимаю WINE подменяет вызовы виндос длл-ок на свои реализации. Думаю kernel32 входит в число длл-ок вызовы которых заменили.

От: Alexey_VL
Дата: 19.10.09 11:41
Оценка:

S>А демонстрацию лучше на виндах демонстрируйте, раз уж там готовое есть.

Суть в том, что продемонстрировать надо работу Linux-программы. Так что виндос тут не подходит.

Читайте также:  Windows mail desktop download

AVL>>Ну и вообще для общего развития интересно — неужели нет проги-эмулятора, позволяющей работать с виндовскими длл-ками в Линуксе, с учетом существования WINE
S>А оно надо? Оно ненадо. Да и вредно.

Хм, ну мне вот сейчас например надо. И судя по количеству аналогичных вопросов в нете, не только мне. Это может и не здорово для использования как архитектурное решение, но в плане временно поставить стороннюю длл-ку в свое Линукс приложение при портировании очень даже неплохо — можно сразу смотреть что получается.

От: Alexey_VL
Дата: 19.10.09 11:47
Оценка:

LS>Насколько я понимаю, вот эти самые winegcc и wineg++ никоим образом не запрещают использовать обычные линуксовые библиотеки и системные вызовы. Т.е. если собирать программу при помощи winegcc, то можно использовать как WinAPI, так и линуксовые API.
LS>Код, необходимый для инициализации WINE, winegcc генерирует сам.

Угу, дочитал Wine-wiki до ответа на свой вопрос. А если у меня только часть исходников Linux-проги, которая используются для собирания so библиотек — никаких подводных камней не возникнет при стыковке с основной частью приложения, которая собрана обычным gcc?

От: LuciferSaratov
Дата: 19.10.09 12:05
Оценка:

Здравствуйте, Alexey_VL, Вы писали:

A_V>Угу, дочитал Wine-wiki до ответа на свой вопрос. А если у меня только часть исходников Linux-проги, которая используются для собирания so библиотек — никаких подводных камней не возникнет при стыковке с основной частью приложения, которая собрана обычным gcc?

Я думаю, чтобы проблем не было, нужно итоговый исполняемый файл линковать при помощи winegcc/wineg++ — чтобы были прилинкованы все нужные библиотеки.

От: Alexey_VL
Дата: 19.10.09 14:00
Оценка:

LS>Я думаю, чтобы проблем не было, нужно итоговый исполняемый файл линковать при помощи winegcc/wineg++ — чтобы были прилинкованы все нужные библиотеки.

В итоге нашел все ответы на свои вопросы в Wine-wiki. Спасиб за ссылку Вот похоже наиболее оптимальный подход для решения задачи по использованию длл-ки в Линукс приложении (из Wine-wiki):

A programmer asked Jun 2007 Wine devel]: [How can I write a shared library that uses Wine and can be called from a non-winelib app?]

S. Dossinger: your plugin, that loads the dll, needs to run in Wine’s environment in order to be able to load the dll. So you have to write a winelib dll. If the plugin is loaded as a library in your host app, the whole host app would have to be a winelib app. Not good So you can split your plugin into two parts, one is the plugin that runs in the host app, the other one is a seperate winelib application that runs in a seperate process and loads the win32 dll. That way the dll gets the virtual memory setup it needs. The two parts of your plugin can use any Unix IPC techniques you feel like using — sockets, pipes, shared memory, semaphores, whatever. You could forward function calls using pipes, transport bigger blobs using shared memory, and synchronise everything using semaphores(and implicit pipe synchronisation).

Читайте также:  Запуск загрузочно диска mac os

Источник

Что делают .dll в программах Linux?

Игры, созданные с использованием Unity3D для Linux, содержат .dll файлы в папке с данными GameDataFolder/Managed .

Что странно, потому что я думал, что Linux использует .so файлы вместо .dll файлов.

(То же самое относится и к приложениям Android-Unity3D.)

Игры, о которых вы говорите, основаны на .NET Framework и работают с Mono, которая является бесплатной реализацией Microsoft .NET Framework с открытым исходным кодом.

Поскольку эти приложения основаны на .NET, сборки имеют расширение .dll. Таким образом, вы можете увидеть файлы DLL в папках.

Одна программа .NET, предназначенная для кроссплатформенного использования, может запускаться в Windows, Linux или Mac с теми же «двоичными файлами» (включая библиотеки DLL, которые также являются сборками), которые скомпилированы в MSIL и требуют выполнения среды выполнения .NET / Mono. ,

Обратите внимание, что у вас также есть несколько бесплатных приложений (не только игр) на основе Mono Framework, доступных в репозиториях Ubuntu. Например: сорванец.

Эти .dll файлы GameDataFolder/Managed принадлежат к родной код программы , которая использует Mono внутренне.

Игровой движок Unity встраивает Mono (даже на большинстве платформ Windows).

Кроссплатформенные исполняемые файлы и общие библиотеки, которые могут запускаться в среде .NET Common Language Runtime или Mono, часто именуются .exe и .dll суффиксами соответственно, даже если они не относятся к Windows. Когда вы находите .dll файл в программе для системы GNU / Linux, такой как Ubuntu, или для любой другой ОС, кроме Windows, обычно это происходит именно по этой причине. Ответ Голбота объясняет это в большинстве случаев .dll в системе Ubuntu . Но это не совсем то, что здесь происходит.

Игровой движок Unity — который не следует путать с графическим интерфейсом по умолчанию в большинстве выпусков Ubuntu —is популярный фирменный кросс-платформенный игровой движок. Этот механизм не работает поверх .NET Framework или Mono. Вместо этого он встраивает моно , то есть Mono работает поверх него. Вот как разработчики пишут любой код, в котором нуждается их игра, который еще не является частью движка Unity.

В общем случае Mono можно использовать так же, как обычно используется Microsoft .NET CLR, для запуска полных программ .NET / Mono. Но Mono также разработан так, чтобы его можно было легко встраивать в приложения с собственным кодом , в том числе для настройки этих приложений . Вот что происходит в ситуации, которую вы описываете. Файлы, которые вы видите, не принадлежат программе, которая запускается прямо поверх Mono или .NET CLR. Вместо этого они принадлежат программе с собственным кодом, которая встраивает Mono.

Как игровой движок Unity использует Mono

Игровой движок Unity, который написан в основном на C ++, содержит собственный экземпляр Mono, который не использует — и может отличаться от — версии (если есть), установленной через менеджер пакетов вашей системы. Эту встроенную среду выполнения Mono нельзя использовать для запуска автономных программ .NET / Mono, поскольку это не является ее целью. Вместо этого часть собственного кода движка использует его для запуска кода CIL. (CIL — это Common Intermediate Language , который является его официальным названием. Ранее он назывался MSIL или Microsoft Intermediate Language, так как Microsoft разработала его изначально.) Программисты, делающие игры, использующие движок Unity, обычно пишут свой собственный код на C #, хотя некоторые другие языки поддерживаются.

Читайте также:  От чего может полететь windows

Движок Unity встраивает Mono даже в Windows. Для игр на универсальной платформе Windows — и никаких других платформ — вместо моно используется Microsoft .NET Framework. Но большинство игр Unity на большинстве платформ, включая большинство мобильных устройств и игровых консолей, а также Ubuntu и Windows, используют Mono. На некоторых платформах IL2CPP доступен в качестве альтернативы Mono, а на некоторых поддерживается только IL2CPP. См. Сценарии ограничения для деталей.

Другие ситуации, когда вы можете увидеть .dll файлы на Ubuntu

Были описаны две ситуации, когда вы можете увидеть .dll файл в Ubuntu:

  1. Общая библиотека, предназначенная для использования приложением .NET / Mono. В ответе Голбота это подробно описано. Это то, что .dll вы увидите в системе Ubuntu. Это просто не то, для чего предназначены .dll файлы в вашей GameDataFolder/Managed папке.
  2. Файл, предоставляющий код, который используется встроенной средой Mono для предоставления «сценариев» для приложения с собственным кодом. Вот что происходит в этом случае.

Есть два других достаточно распространенных случая, когда вы можете увидеть .dll файл в Ubuntu:

  1. Компилятор для .NET Core создает .dll файлы, а не .exe файлы, даже если то, что вы компилируете, не является библиотекой. Эти файлы запускаются средой выполнения .NET Core (называемой CoreCLR), а не обычной .NET Framework или Mono. .NET Core — это продукт Microsoft, но в отличие от стандартного .NET Framework, .NET Core является кросс-платформенным с официальной поддержкой систем GNU / Linux, таких как Ubuntu, и является бесплатным программным обеспечением с открытым исходным кодом .
  2. Иногда .dll файл, который вы видите в Ubuntu, будет просто библиотекой Windows. Вы можете увидеть это, если программа хранится в системе Ubuntu, но работает в Windows, или если вы монтируете диск Windows в Ubuntu. Это также может быть связано с программами, которые можно запускать в Ubuntu с помощью Wine , в том числе с программным обеспечением, которое поставляется вместе с Wine, или которое вы устанавливаете автоматически winetricks для поддержки другого программного обеспечения Windows.

Это не попытка исчерпывающего перечисления всех обстоятельств, когда вы можете столкнуться с .dll Ubuntu. (Например, это также может быть библиотека OS / 2. ) Однако я считаю, что эти четыре случая являются наиболее распространенными.

Источник

Оцените статью