我现在已经花了整整一整天的时间,似乎无法用VS 2017构建.lib
文件。我在这里关注了V8文档:
按照说明进行操作确实可以,但是我最终在out
目录和.lib
中使用了V8命令行程序,这些程序不适用于Visual Studio2017。
严重错误LNK1107:文件无效或损坏:无法从0x1422A读取
我执行此操作以尝试仅获取库的构建文件:
gn gen out/lib --args="v8_static_library=true v8_use_snapshot=true v8_use_external_startup_data=false v8_monolithic=true icu_use_data_file=false is_component_build=false is_debug=false"
然后运行:ninja -C out/lib
这是最终结果:
ninja: Entering directory `out/lib'
[1632/1645] LINK cctest.exe cctest.exe.pdb
FAILED: cctest.exe cctest.exe.pdb
ninja -t msvc -e environment.x64 -- ../../../../third_party/llvm-build/Release+Asserts/bin/lld-link.exe /nologo /OUT:./cctest.exe /PDB:./cctest.exe.pdb @./cctest.exe.rsp
lld-link: error: <root>: undefined symbol: mainCRTStartup
[1634/1645] LINK generate-bytecode-expectations.exe generate-bytecode-expectations.exe.pdb
ninja: build stopped: subcommand failed.
我想我缺少了一些东西,但是我现在不知道。
答案 0 :(得分:0)
好吧,看来我的第一个错误是将提示更改为v8\tools\dev\
并从那里开始工作。我发现的“正常”步骤实际上只能从源代码的根部正常工作。我以v8\tools\dev\out\x64.release
结尾,然后ninja -C out/x64.release v8
失败,因为出于某种原因该设置未接受v8
。
我要做的另一件事是直接编辑args.gn
文件并保存。正确的过程是运行gn args out.gn\x64.release
,以便保存并关闭编辑器后,它会自动重新生成/更新文件。很有可能更改文件本身不会产生任何效果,并且您会感到困惑,因为ninja
甚至看不到更改。
有关损坏的文件的链接器错误是因为默认情况下is_clang
为true。设置is_clang=false
可修复该错误。它只是有效,我不知道为什么。随身携带...;)
从对我有用的根源出发,正确的方法是:
python tools\dev\v8gen.py x64.release
python tools\dev\v8gen.py ia32.release
python tools\dev\v8gen.py x64.debug
python tools\dev\v8gen.py ia32.debug
这将输出可以在“ v8 \ out.gn”文件夹中编译的文件。
提示:运行“ python tools \ dev \ v8gen.py list”以查看可能的构建配置列表。
接下来,我更新了构建参数:
gn args out.gn\x64.release
使用这些:
is_debug = false <-(or true for debug builds)
target_cpu = "x64"
is_component_build = false
v8_static_library = true
use_custom_libcxx = false
use_custom_libcxx_for_host = false
v8_use_external_startup_data = false <-(or true to use the bin startup files)
is_clang = false
对于32位版本(当然将上面的"x64"
更改为"x86"
):
gn args out.gn\ia32.release
然后对x64.debug
和ia32.debug
重复以上所有操作。
并编译它们:
ninja -C out.gn/x64.debug v8
ninja -C out.gn/ia32.debug v8
ninja -C out.gn/x64.release v8
ninja -C out.gn/ia32.release v8
Visual Studio 2017现在将立即构建并与它们链接我的项目(这是我复活的旧项目)。
注意:链接到V8库的调试版本可能会导致错误_ITERATOR_DEBUG_LEVEL
不匹配。要解决此问题,我只需进入C ++项目设置(Confiuration Properties->C/C++->Preprocessor->Preprocesor Definitions
)并添加;_ITERATOR_DEBUG_LEVEL=0
使其匹配。