如何链接v8?

时间:2015-09-01 16:09:08

标签: c++ compilation v8 static-linking

我成功编译了v8 javascript engine(在Windows上);现在我尝试按照Getting started article进行操作,但我现在陷入困境:

  1. 编译hello_world.cpp,链接到在构建过程中创建的静态库。
  2. 该示例适用于Linux(可能是早期版本)。

    我试图链接所有我无法成功的图书馆:

    User@PC:/cygdrive/c/Users/Yvain/Documents/depot_tools/v8/build/Release
    g++  -std=c++0x  -I"C:\Users\Yvain\Documents\depot_tools\v8" -Llib -lv8_libbase -lv8_base_0 -lv8_base_1 -lv8_base_2 -lv8_base_3 -lgmock -lgtest -licui18n -licuuc -lv8_external_snapshot -lv8_libplatform -lv8_nosnapshot hello_world.cpp -o hello_world
    

    它会出现以下错误:

      /tmp/ccPxkjlV.o:hello_world.cpp:(.text+0x1a): 
           undefined reference to « v8::V8::InitializeICU(char const*) »
      [...]undefined reference to « v8::V8::InitializeExternalStartupData(char const*) »
      [...]
      [...]undefined reference to  « v8::Isolate::Exit() »
    

    有一个工作示例:v8/sample/hello-world.vcxproj但我不明白项目中指定库的位置。

1 个答案:

答案 0 :(得分:0)

使用来自$rootScope.$on('$stateChangeStart', function(event, newUrl, oldUrl, fromState, fromParams) { //No I18N var l = ($location.$$path).split("/"); l.shift(); var step = l[1]; if (step != "step4") return var module = l[2]; if (newUrl.data.elementExists(module)) { var el = document.getElementById("SECTION" + module.hashCode()); ZCScrollComponents.scrollTo(ZCDocumentationContainer, el.offsetTop, 300, null); event.preventDefault(); $state.go(fromState.name, null, { notify: false, location: true }); } }) 的GYP生成了Visual Studio项目v8/sample/hello-world.vcxproj,其中包含所有必需的依赖项。

在当前版本的“入门”文章的“运行示例”部分中,项目列表#3包含构建hello_world的命令行示例:

  

编译hello_world.cpp,链接到在其中创建的静态库   构建过程。例如,在使用GNU编译器的64位Linux上:

v8/build/samples/samples.gyp

在Windows上,您需要使用类似的静态库列表作为链接器输入。请注意,这些静态库位于g++ -I. hello_world.cpp -o hello_world -Wl,--start-group out/x64.release/obj.target/{tools/gyp/libv8_{base,libbase,external_snapshot,libplatform},third_party/icu/libicu{uc,i18n,data}}.a -Wl,--end-group -lrt -ldl -pthread -std=c++0x 目录中。