0

我正在使用最新的 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 Studio\2017\BuildTools\VC\Tools\MSVC\14.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

我在带有 VS Build Tools 2017 的 Windows 上使用 DMD v2.082.0 上的 LDC2 版本 1.12.0-beta2。感谢任何解决方案或更正。

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

4

1 回答 1

2

-I告诉它在哪里可以找到要导入的源代码。假设实际目标代码将在您传递给链接器的某个预编译库(或单独的 .obj 文件)中找到。

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

所以这是你的三个选择:

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