【问题标题】:LNK1181 error when compiling V8 engine on Win10在Win10上编译V8引擎时出现LNK1181错误
【发布时间】:2017-11-22 10:20:59
【问题描述】:

我在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 Kit 安装中有多个文件夹。

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 版本,所以我删除了它,然后我开始使用不同的输入文件(advapi32.lib 我假设第一个文件)收到LNK1181 错误它找不到)。这就是我得出路径不正确的结论的原因。


所以我尝试了一些方法来改变路径(我希望只是卸载旧版本就可以解决它)例如:

  • 卸载旧版本。
  • 查看注册表项以查看是否可以找到安装路径或使用该路径的东西,但我没有。我确实注意到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 路径有关的内容,但什么也没看到。

如果有任何帮助和建议,我将不胜感激。谢谢。

【问题讨论】:

  • 在 Windows 上构建如此大的项目总是一团糟。尝试 linux,您将轻松完成构建过程。
  • 不幸的是,我正在尝试将引擎嵌入到我正在开发的 Windows 应用程序中。不过我可能会这样做,所以我至少可以玩弄它,直到我让它在 Windows 上编译。

标签: c++ windows compiler-errors v8


【解决方案1】:

您可以尝试使用 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

【讨论】:

    【解决方案2】:

    我正在关注本指南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
    

    我能够继续构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多