可执行文件和DLL /共享库在同一个二进制文件中

时间:2013-10-31 11:02:18

标签: c++ linux windows operating-system

是否可以创建单个二进制文件,操作系统可以加载并作为可执行文件运行,但也可以动态链接?

这对于客户端和服务器可以驻留在同一个可执行文件中(甚至可能共享代码)的应用程序之间的资源共享非常有用。

我对Linux以及Windows感兴趣

3 个答案:

答案 0 :(得分:3)

在Windows上至少不支持此功能。您使用LoadLibrary加载模块,并且无法将可执行文件传递给LoadLibrary,然后从该模块执行代码。 documentation说:

  

LoadLibrary也可用于加载其他可执行模块。例如,该函数可以指定.exe文件以获取可在FindResource或LoadResource中使用的句柄。但是,不要使用LoadLibrary来运行.exe文件。而是使用CreateProcess函数。

实现所需目标的最简单方法如下:

  • 将应用程序的所有代码放入DLL中。
  • 从该DLL导出所需的任何功能。
  • 如果这是一个GUI子系统应用程序,还可以导出main函数,或者WinMain
  • 创建一个简单的可执行程序,链接到您的DLL并将其主要功能委托给DLL导出的程序。

答案 1 :(得分:0)

看这里,它至少可以在windows下回答你的问题。 http://sandsprite.com/CodeStuff/Using_an_exe_as_a_dll.html

答案 2 :(得分:0)

您可以使用exe导出lib中的符号链接,并将另一个项目(例如DLL项目)链接到该lib。然后,您可以从exe本身动态加载DLL,一切正常。我不确定是否可以使用它,否则就像使用LoadLibrary

一样

勒兹。