Можно ли создать единый двоичный файл, который операционная система может загружать и запускать в качестве исполняемого файла, но с возможностью динамической привязки?
Это будет полезно для совместного использования ресурсов между приложениями, где клиент и сервер могут находиться в одном и том же исполняемом файле (и, возможно, даже совместно использовать код).
Меня интересуют Linux, а также Windows
В Windows по крайней мере это не поддерживается. Вы загружаете модули с помощью LoadLibrary
и вы не можете передать исполняемый файл в LoadLibrary
и впоследствии выполнить код из этого модуля. В документации говорится:
LoadLibrary также может использоваться для загрузки других исполняемых модулей. Например, функция может указать файл.exe для получения дескриптора, который может использоваться в FindResource или LoadResource. Однако не используйте LoadLibrary для запуска файла.exe. Вместо этого используйте функцию CreateProcess.
Самый простой способ добиться того, что вам нужно, это:
main
функцию или, возможно, WinMain
если это приложение подсистемы графического интерфейса. Вы можете использовать exe для экспорта ссылок на символы в lib и связать другой проект (например, проект DLL) с этим lib. Затем вы можете динамически загружать DLL из самого exe, и все работает. Я не уверен, могу ли использовать его иначе, как с помощью LoadLibrary
Разван.
Послушайте, он мог ответить на ваш вопрос хотя бы под окнами. http://sandsprite.com/CodeStuff/Using_an_exe_as_a_dll.html