是否可以在一个 exe 中静态地 link 所有库?

Is it's possible to link all libs statically in one exe?

现在我在 D 中的项目有很多不同的库。是否可以静态地 link 它们并制作单个 exe(大小不是问题)。

我应该将哪个命令传递给 DMD,或者有什么方法可以在 DUB 配置中指定它?

正如 ratchet freak 所说,您需要将依赖项编译为静态库本身。一旦将依赖项作为静态库,就可以像在动态库中一样在 dub.jsonlibs 条目中列出它们。

它可能不是一个光辉的例子,但 here 是一个 dub.json 我用来管理我想创建静态和动态构建的项目。我使用 configurations 部分来分隔静态和动态 linked 构建。构建时,我使用 --config= 标志在静态构建和动态构建之间进行选择。

如果您自己构建依赖项的静态库并且不想将它们放在系统的库搜索路径中,您可以使用 lflags 中的 -L 选项来指定静态库的位置。

请注意,静态编译您的直接依赖项并不一定意味着您的项目将没有动态依赖项——它可能仍然 link 动态地对您的依赖项的依赖项进行动态编译(除非您也静态编译它们)。例如,我上面 linked 的项目静态地 linked 到 allegro 及其模块,但仍然动态地 linked 到 allegro 的依赖项,例如libogglibpng(因为我没有编译它们的静态版本)。