是否可以在一个exe中静态链接所有lib?

时间:2015-01-17 21:10:15

标签: dll d dub

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

我应该将哪个命令传递给DMD,或者有没有办法在DUB配置中指定它?

1 个答案:

答案 0 :(得分:1)

正如棘轮怪说的那样,你需要将依赖项编译为静态库本身。将依赖项作为静态库后,可以将它们列在libs的{​​{1}}条目中,就像动态库一样。

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

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

请注意,静态编译直接依赖项并不一定意味着您的项目没有动态依赖项 - 它仍然可以动态链接到依赖项的依赖项(除非您静态编译它们)。例如,我上面链接的项目静态链接到lflags及其模块,但仍然动态链接到allegro的依赖项,如allegrolibogg(因为我做了)不编译那些的静态版本。)