【问题标题】:What is meant by an exe being dynamically compiled?动态编译的exe是什么意思?
【发布时间】:2017-07-05 18:10:26
【问题描述】:

从 MySQL 网站 here 的一个页面中看到以下段落:

您可以使用 C 或 C++(或其他可以使用 C 的语言)编写插件 调用约定)。插件是动态加载和卸载的,所以 你的操作系统必须支持动态加载并且你必须有 动态(非静态)编译调用应用程序。为了 服务器插件,这意味着必须编译 mysqld 动态

动态编译是什么意思?我知道动态链接,但我不确定动态编译是什么意思。

另外,在 Windows 10 (x64) 上,如何确保 exe 已动态编译?是否可以从 dumpbin 的输出中找出答案?以下是 mysqld.exe(5.7 版)的 dumpbin 输出:

注意:我查看了this old question,它没有为我提供那么多信息。它建议的依赖工具不再在 Windows 上。

【问题讨论】:

  • 也许他们在谈论动态链接的 CRT 与静态链接的 CRT。
  • @drescherjm 也许,我从来没有想过。谢谢。
  • @drescherjm 例如,如果内存由插件分配但随后由应用程序释放,则这是一个问题,反之亦然。如果您不以这种方式越界,您应该可以静态链接到 CRT。
  • @DavidSchwartz 我想询问您刚才描述的问题的详细信息/含义,但不想影响我的欢迎!

标签: windows dll dumpbin depends


【解决方案1】:

动态编译只是意味着您正在编译代码,以便编译后的输出适合动态链接。

在 Windows 上,创建为 DLL 的过程必然会将其编译为适合动态链接,因为 DLL 始终是动态链接的。

我相信今天的大多数平台总是动态编译并产生可重定位的输出,即使它们随后是静态链接的。

【讨论】:

  • 谢谢。是否可以为 exe 而不是 DLL 发现此属性?
  • 我不是 100% 确定,但我相信现代 Windows 平台总是动态编译。这意味着,如果您愿意,每个现代 Windows 可执行文件都适合与另一个可执行文件动态链接,也就是说,可以像 DLL 一样被另一个可执行文件加载。
  • 在我包含的屏幕截图中,dumpbin 报告了 DLL 特征,尽管该文件是一个 exe。这可能是一种或另一种线索吗?
  • @Sabuncu 我相信这是因为在现代 Windows 平台上,EXE 和 DLL 之间的差异非常小。无法直接启动 DLL,但这实际上是唯一的区别。
  • 非常感谢。您的回答为我提供了进一步研究的必要基础。
猜你喜欢
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2019-10-23
相关资源
最近更新 更多