在 Visual Studio 中构建和链接 V8
Building and Linking V8 in Visual Studio
我真的很难弄清楚如何在 Windows 上构建 Google 的 V8。
到目前为止我有:
- 已安装depot_tools
- 获取 v8:
fetch v8
- 创建了项目文件:
gn gen --ide=vs2015 out/Default
- 在 VS2015 中构建整个解决方案
我的问题是这只会产生大量 .obj
个文件,而不会产生 .lib
个文件。
我已将项目(v8、v8_base、v8_libbase 等)设置为 Configuration type: Static library (.lib)
:
我不确定如何让 Visual Studio 生成库文件。感谢任何帮助!
更新
我已经通过以下步骤成功生成了库文件:
- 打开 VS Developer 命令行
- 导航到包含
v8_base
、v8_libbase
、v8_external_snapshot
和 v8_libplatform
. 的 obj 文件的目录
- 对于其中的每一个,使用
lib
命令手动构建一个 .lib
,例如lib /o:v8_base *.obj
- 将所有这些 lib 文件与
icui18n.lib
和 icuuc.lib
一起复制到一个目录中(这些文件在构建期间创建得很好。)
我现在正在尝试实际使用这些库,但遇到了一个新问题,希望得到帮助。
我在 VS 中链接了以下库:v8_base.lib; v8_libbase.lib; v8_external_snapshot.lib; v8_libplatform.lib; icui18n.lib; icuuc.lib; winmm.lib;
,但是我遇到了一些未解析符号的问题:
unresolved external symbol "public: static void __cdecl v8::sampler::Sampler::TearDown(void)" (?TearDown@Sampler@sampler@v8@@SAXXZ) referenced in function "public: static void __cdecl v8::internal::V8::TearDown(void)" (?TearDown@V8@internal@v8@@SAXXZ) TriviaBot v8_base.lib(v8.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Stop(void)" (?Stop@Sampler@sampler@v8@@QEAAXXZ) referenced in function "private: void __cdecl v8::internal::Isolate::Deinit(void)" (?Deinit@Isolate@internal@v8@@AEAAXXZ) v8_base.lib(isolate.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Stop(void)" (?Stop@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: __cdecl v8::sampler::Sampler::Sampler(class v8::Isolate *)" (??0Sampler@sampler@v8@@QEAA@PEAVIsolate@2@@Z) referenced in function "public: __cdecl v8::internal::Ticker::Ticker(class v8::internal::Isolate *,int)" (??0Ticker@internal@v8@@QEAA@PEAVIsolate@12@H@Z) v8_base.lib(log.obj)
unresolved external symbol "public: __cdecl v8::sampler::Sampler::Sampler(class v8::Isolate *)" (??0Sampler@sampler@v8@@QEAA@PEAVIsolate@2@@Z) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: virtual __cdecl v8::sampler::Sampler::~Sampler(void)" (??1Sampler@sampler@v8@@UEAA@XZ) referenced in function "public: virtual void * __cdecl v8::internal::Ticker::`scalar deleting destructor'(unsigned int)" (??_GTicker@internal@v8@@UEAAPEAXI@Z)
unresolved external symbol "public: virtual __cdecl v8::sampler::Sampler::~Sampler(void)" (??1Sampler@sampler@v8@@UEAA@XZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Start(void)" (?Start@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Engage(void)" (?Engage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::IncreaseProfilingDepth(void)" (?IncreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Engage(void)" (?Engage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::IncreaseProfilingDepth(void)" (?IncreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DecreaseProfilingDepth(void)" (?DecreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Disengage(void)" (?Disengage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DecreaseProfilingDepth(void)" (?DecreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DoSample(void)" (?DoSample@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: virtual void __cdecl v8::internal::SamplingThread::Run(void)" (?Run@SamplingThread@internal@v8@@UEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DoSample(void)" (?DoSample@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: static void __cdecl v8::sampler::Sampler::SetUp(void)" (?SetUp@Sampler@sampler@v8@@SAXXZ) referenced in function "private: static void __cdecl v8::internal::V8::InitializeOncePerProcessImpl(void)" (?InitializeOncePerProcessImpl@V8@internal@v8@@CAXXZ) v8_base.lib(v8.obj)
所有错误似乎都与 v8::sampler
有关 - 再次感谢您的帮助!
看来我又在回答我自己的问题了。我希望我在问题中列出的信息对像我一样受过时文档困扰的任何人都有用。
除了我什至没有注意到 v8_libsampler
项目并忘记为其生成库文件之外,我的更新涵盖了所有需要的内容。一旦我这样做并链接它,我就起来了 运行!
就像你一样,我尝试了不同的设置来构建库。这是我的步骤:
- 在 gn gen 之后,运行 gn args out/Default,取消注释 is_component_build,我猜这相当于 component=shared_library。
- 虽然我在 vs.net 中构建 all.sln 时也遇到问题,但我意识到 msbuild 可以为我提供一些 dll/lib 文件。
祝你好运。
我已经完成了类似的配置,但针对 VS2013 并运行 ninja 来构建所有内容。 Build 为我生成了一组 DLL,包括 v8.dll,我完全可以接受。
我真的很难弄清楚如何在 Windows 上构建 Google 的 V8。
到目前为止我有:
- 已安装depot_tools
- 获取 v8:
fetch v8
- 创建了项目文件:
gn gen --ide=vs2015 out/Default
- 在 VS2015 中构建整个解决方案
我的问题是这只会产生大量 .obj
个文件,而不会产生 .lib
个文件。
我已将项目(v8、v8_base、v8_libbase 等)设置为 Configuration type: Static library (.lib)
:
我不确定如何让 Visual Studio 生成库文件。感谢任何帮助!
更新
我已经通过以下步骤成功生成了库文件:
- 打开 VS Developer 命令行
- 导航到包含
v8_base
、v8_libbase
、v8_external_snapshot
和v8_libplatform
. 的 obj 文件的目录
- 对于其中的每一个,使用
lib
命令手动构建一个.lib
,例如lib /o:v8_base *.obj
- 将所有这些 lib 文件与
icui18n.lib
和icuuc.lib
一起复制到一个目录中(这些文件在构建期间创建得很好。)
我现在正在尝试实际使用这些库,但遇到了一个新问题,希望得到帮助。
我在 VS 中链接了以下库:v8_base.lib; v8_libbase.lib; v8_external_snapshot.lib; v8_libplatform.lib; icui18n.lib; icuuc.lib; winmm.lib;
,但是我遇到了一些未解析符号的问题:
unresolved external symbol "public: static void __cdecl v8::sampler::Sampler::TearDown(void)" (?TearDown@Sampler@sampler@v8@@SAXXZ) referenced in function "public: static void __cdecl v8::internal::V8::TearDown(void)" (?TearDown@V8@internal@v8@@SAXXZ) TriviaBot v8_base.lib(v8.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Stop(void)" (?Stop@Sampler@sampler@v8@@QEAAXXZ) referenced in function "private: void __cdecl v8::internal::Isolate::Deinit(void)" (?Deinit@Isolate@internal@v8@@AEAAXXZ) v8_base.lib(isolate.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Stop(void)" (?Stop@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: __cdecl v8::sampler::Sampler::Sampler(class v8::Isolate *)" (??0Sampler@sampler@v8@@QEAA@PEAVIsolate@2@@Z) referenced in function "public: __cdecl v8::internal::Ticker::Ticker(class v8::internal::Isolate *,int)" (??0Ticker@internal@v8@@QEAA@PEAVIsolate@12@H@Z) v8_base.lib(log.obj)
unresolved external symbol "public: __cdecl v8::sampler::Sampler::Sampler(class v8::Isolate *)" (??0Sampler@sampler@v8@@QEAA@PEAVIsolate@2@@Z) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: virtual __cdecl v8::sampler::Sampler::~Sampler(void)" (??1Sampler@sampler@v8@@UEAA@XZ) referenced in function "public: virtual void * __cdecl v8::internal::Ticker::`scalar deleting destructor'(unsigned int)" (??_GTicker@internal@v8@@UEAAPEAXI@Z)
unresolved external symbol "public: virtual __cdecl v8::sampler::Sampler::~Sampler(void)" (??1Sampler@sampler@v8@@UEAA@XZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::Start(void)" (?Start@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Engage(void)" (?Engage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::IncreaseProfilingDepth(void)" (?IncreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Engage(void)" (?Engage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::IncreaseProfilingDepth(void)" (?IncreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DecreaseProfilingDepth(void)" (?DecreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: void __cdecl v8::internal::Profiler::Disengage(void)" (?Disengage@Profiler@internal@v8@@QEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DecreaseProfilingDepth(void)" (?DecreaseProfilingDepth@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DoSample(void)" (?DoSample@Sampler@sampler@v8@@QEAAXXZ) referenced in function "public: virtual void __cdecl v8::internal::SamplingThread::Run(void)" (?Run@SamplingThread@internal@v8@@UEAAXXZ) v8_base.lib(log.obj)
unresolved external symbol "public: void __cdecl v8::sampler::Sampler::DoSample(void)" (?DoSample@Sampler@sampler@v8@@QEAAXXZ) v8_base.lib(cpu-profiler.obj)
unresolved external symbol "public: static void __cdecl v8::sampler::Sampler::SetUp(void)" (?SetUp@Sampler@sampler@v8@@SAXXZ) referenced in function "private: static void __cdecl v8::internal::V8::InitializeOncePerProcessImpl(void)" (?InitializeOncePerProcessImpl@V8@internal@v8@@CAXXZ) v8_base.lib(v8.obj)
所有错误似乎都与 v8::sampler
有关 - 再次感谢您的帮助!
看来我又在回答我自己的问题了。我希望我在问题中列出的信息对像我一样受过时文档困扰的任何人都有用。
除了我什至没有注意到 v8_libsampler
项目并忘记为其生成库文件之外,我的更新涵盖了所有需要的内容。一旦我这样做并链接它,我就起来了 运行!
就像你一样,我尝试了不同的设置来构建库。这是我的步骤:
- 在 gn gen 之后,运行 gn args out/Default,取消注释 is_component_build,我猜这相当于 component=shared_library。
- 虽然我在 vs.net 中构建 all.sln 时也遇到问题,但我意识到 msbuild 可以为我提供一些 dll/lib 文件。
祝你好运。
我已经完成了类似的配置,但针对 VS2013 并运行 ninja 来构建所有内容。 Build 为我生成了一组 DLL,包括 v8.dll,我完全可以接受。