Исполняемый файл и DLL / общая библиотека в одном бинарном файле

0

Можно ли создать единый двоичный файл, который операционная система может загружать и запускать в качестве исполняемого файла, но с возможностью динамической привязки?

Это будет полезно для совместного использования ресурсов между приложениями, где клиент и сервер могут находиться в одном и том же исполняемом файле (и, возможно, даже совместно использовать код).

Меня интересуют Linux, а также Windows

Теги:
operating-system

3 ответа

3

В Windows по крайней мере это не поддерживается. Вы загружаете модули с помощью LoadLibrary и вы не можете передать исполняемый файл в LoadLibrary и впоследствии выполнить код из этого модуля. В документации говорится:

LoadLibrary также может использоваться для загрузки других исполняемых модулей. Например, функция может указать файл.exe для получения дескриптора, который может использоваться в FindResource или LoadResource. Однако не используйте LoadLibrary для запуска файла.exe. Вместо этого используйте функцию CreateProcess.

Самый простой способ добиться того, что вам нужно, это:

  • Поместите весь код для вашего приложения в DLL.
  • Экспортируйте любые необходимые вам функции из этой DLL.
  • Также экспортируйте main функцию или, возможно, WinMain если это приложение подсистемы графического интерфейса.
  • Создайте тривиальную исполняемую программу, которая ссылается на вашу DLL и делегирует ее основную функцию тому, что экспортируется DLL.
0

Вы можете использовать exe для экспорта ссылок на символы в lib и связать другой проект (например, проект DLL) с этим lib. Затем вы можете динамически загружать DLL из самого exe, и все работает. Я не уверен, могу ли использовать его иначе, как с помощью LoadLibrary

Разван.

0

Послушайте, он мог ответить на ваш вопрос хотя бы под окнами. http://sandsprite.com/CodeStuff/Using_an_exe_as_a_dll.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню