在Win10上编译V8引擎时出现LNK1181错误

时间:2017-11-22 10:20:59

标签: c++ windows compiler-errors v8

我在building V8上遵循本指南,但我在编译步骤中遇到了一些问题。我正在运行Windows 10 x64。我正在尝试使用嵌入引擎的选项进行编译。

运行以下命令:

ninja -C out.gn/x64.release

给我这个错误:

ninja: Entering directory `out.gn/x64.release'
[1/471] LINK mksnapshot.exe mksnapshot.exe.pdb
FAILED: mksnapshot.exe mksnapshot.exe.pdb
C:/Workspace/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x64 False link.exe /nologo /OUT:./mksnapshot.exe /PDB:./mksnapshot.exe.pdb @./mksnapshot.exe.rsp
LINK : fatal error LNK1181: cannot open input file 'comdlg32.lib'
ninja: build stopped: subcommand failed.

现在我相信我已经缩小了错误,以便在错误的目录中查找.lib个文件。我安装了多个版本,因此Windows套件安装中有多个文件夹。

Windows Kits/10/Lib/10.0.16299.0
Windows Kits/10/Lib/10.0.15xxx.0

如果我将comdlg32.lib文件从10.0.16299.0拖放到10.0.15xxx.0目录中,则错误会更改为LNK1181错误,并且输入文件不同。我这样做了几次,但我不确定这是否会导致不同版本的问题,并且可能会有很多。

我卸载了我提到的文件夹后面留下的10.0.15xxx.0版本,所以我删除了它,之后我开始使用不同的输入文件LNK1181收到advapi32.lib错误我假设它找不到第一个文件。这就是我得出关于路径不正确的结论。

所以我尝试了一些改变路径的方法(我希望卸载旧版本会修复它),例如:

  • 卸载旧版本。
  • 浏览注册表项以查看是否可以找到使用该路径的安装路径或其他内容,我没有这样做。我注意到10.0.15xxx.0安装的注册表中仍然存在安装和数据,我可能会尝试直接从注册表中删除它作为最后的手段?
  • 我尝试通过在此文件中设置<TargetUniversalCRTVersion>10.0.16299.0</TargetUniversalCRTVersion>来明确设置路径:C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\uCRT.props
  • 之前我从未使用过Ninja,所以我尝试在命令中设置某种lib-path的方法,但却找不到任何东西。
  • 我查看了正在执行的python脚本,试图找到与libs路径有关的内容,但看不到任何内容。

我将不胜感激任何帮助和建议。感谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Visual Studio编译v8,如下所述:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#using-the-visual-studio-ide

运行以下命令:

$ gn gen --ide=vs out.gn/x64.release
$ cd out.gn/x64.release
$ msbuild all.sln

您可以在此处查看完整示例:https://github.com/phpv8/v8js/issues/272#issuecomment-262848754

显然这种方法不再正式支持,但我遇到了同样的问题,这解决了我的问题。

请注意,在此之后我遇到了另一个问题,由于链接错误,单元测试无法编译,但我有必要的库来使用v8。所以可能存在更深层次的问题导致我失踪的所有这些。

编辑:

此外,您可以尝试使用gn args设置以下参数:

visual_studio_path = "..."
visual_studio_version = "2017"
wdk_path = "..."
windows_sdk_path = "C:\Program Files (x86)\Windows Kits\10"

要设置这些参数,请执行:

gn args out.gn/x64.release

这将打开一个文本编辑器,您可以在其中编写您感兴趣的额外参数。

要查看您可以指定的完整参数列表:

gn args --list out.gn/x64.release

答案 1 :(得分:0)

我正在关注本指南https://medium.com/dailyjs/how-to-build-v8-on-windows-and-not-go-mad-6347c69aacd4并且还遇到了错误

LINK1181: cannot open input file 'advapi32.lib'

我很确定这是因为我有错误版本的Windows 10 SDK。和你类似我有版本:

Windows Kits/10/Lib/10.0.10240.0
Windows Kits/10/Lib/10.0.16299.0

但根据https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#Setting-up-Windows(我认为相关),你需要版本10.0.15063.0

将版本10.0.15063.0(使用visual studio安装程序)安装到

之后
Windows Kits/10/Lib/10.0.15063.0

我能够继续构建。