LDC2 -I 选项导致未解决的外部问题

LDC2 -I option results in unresolved externals

我正在使用最新的 LDC2 测试版,当 运行 带有 -I 的编译器(也在 中查找导入)时,它因未解析的外部因素而失败。这些是我的命令。

$ ldc2 "source\setup.d" -I "source" -J "build\vars" -of "build\bin\setup.exe" -m32 -g
setup.obj : error LNK2019: unresolved external symbol __D6common17createErrorDialogFxC9ExceptionZv referenced in function __Dmain
setup.obj : error LNK2019: unresolved external symbol __D6common14getConsoleArgsFxPuZAAya referenced in function __D5setup20getAvailableBrowsersFZ14__foreachbody1MFKC3std7windows8registry3KeyZi
setup.obj : error LNK2001: unresolved external symbol __D6common12__ModuleInfoZ
build\bin\setup.exe : fatal error LNK1120: 3 unresolved externals
Error: C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\VC\Tools\MSVC.15.26726\bin\HostX86\x86\link.exe failed with status: 1120

但是当我明确告诉编译器 setup.d 依赖于 common.d.

时,下一个工作正常
$ ldc2 "source\setup.d" "source\common.d" -J "build\vars" -of "build\bin\setup.exe" -m32 -g

我在 DMD v2.082.0 上使用 LDC2 版本 1.12.0-beta2,在 Windows 上使用 VS Build Tools 2017。 任何解决方案或更正表示赞赏。

注意:这些编译命令将由其他代码生成,因此使用显式文件名是不可行的。

-I 告诉它在哪里可以找到要导入的源代码。假设实际的目标代码将在您传递给 linker.

的某处的预编译库(或单独的 .obj 文件)中找到

如果您希望它在构建中包含文件,使用最新的 ldc 构建之一(截至最近几个月),它还有 -i 除了 -I 你可以通过。 -I 告诉它在哪里可以找到导入文件。 -i 告诉它将它们添加到构建中,而不是仅仅将它们视为外部库头文件。

这就是你的三个选择:

  • 单独编译库,并将生成的lib文件添加到link步骤
  • 在命令行上将所有源文件一起传递(如果它是由其他代码生成的,只需更改该代码以遍历目录 lol)
  • 获取最新的编译器版本之一并将 -i 添加到构建命令。