zoukankan      html  css  js  c++  java
  • v8编译和测试程序

    1 -- 使用scons编译代码

    scons是一个用 Python 语言编写的类似于 make 工具的程序。与 make 工具相比较,scons的配置文件更加简单清晰明。scons依赖于python2.x,所以在开始编译v8之前需要安装好python2.x以及socns。
    在这里下载scons:http://nchc.dl.sourceforge.net/project/scons/scons/2.2.0/scons-2.2.0.tar.gz。
    下载后按照如下所示方法进行安装。

    $root> cd scons-2.2.0
    $root> python setup.py install

    python2.x以及scons安装成功后,按如下步骤编译V8:
    STEP01 通过SVN下载V8源代码。

    $svn co svn checkout http://v8.googlecode.com/svn/trunk /objs/v8

    STEP02 使用scons编译V8代码。

    $ cd /objs/v8
    $ scons library=static

    如果一切皆顺利,那么在编译输出的最后,将会看到如下的信息:

    ranlib libv8preparser.a
    scons: done building targets.
    
    #######################################################
    #  WARNING: Building V8 with SCons is deprecated and  #
    #  will not work much longer. Please switch to using  #
    #  the GYP-based build now. Instructions are at       #
    #  http://code.google.com/p/v8/wiki/BuildingWithGYP.  #
    #######################################################

    该警告信息表明,v8已经不推荐使用scons来编译代码了,取而代之使用gyp编译工具,下面我们就尝试使用gyp来编译v8。

    2 -- 使用gyp编译代码

    STEP01 通过SVN下载V8源代码。

    $svn co svn checkout http://v8.googlecode.com/svn/trunk /objs/v8

    STEP02 开始编译。

    $ make ia32

    编译过程中,请注意有如下几个命令来生成静态库:

    AR(target) /objs/v8/out/ia32.release/obj.target/tools/gyp/libpreparser_lib.a
    AR(target) /objs/v8/out/ia32.release/obj.target/tools/gyp/libv8_base.a
    AR(target) /objs/v8/out/ia32.release/obj.target/tools/gyp/libv8_nosnapshot.a
    AR(target) /objs/v8/out/ia32.release/obj.target/tools/gyp/libv8_snapshot.a

    在此我们可以找到v8最终生成库的位置。

    3 -- 测试v8的例子

    v8安装成功后,肯定是迫不及待的想要写个小程序来见识下v8编程的魅力,如果没有合适的例子,可以将如下的helloworld.cpp和Makefile保存下来,直接测试之。
    将如下代码段保存为helloworld.cpp:

    #include <v8.h>
    using namespace v8;
    int main(int argc, char* argv[]) 
    {
        // Create a stack-allocated handle scope.
        HandleScope handle_scope;
        // Create a new context.
        Persistent<Context> context = Context::New();
        // Enter the created context for compiling and
        // running the hello world script. 
        Context::Scope context_scope(context);
        // Create a string containing the JavaScript source code.
        Handle<String> source = String::New("'Hello' + ', World!'");
        // Compile the source code. 
        Handle<Script> script = Script::Compile(source);
        // Run the script to get the result.
        Handle<Value> result = script->Run();
        // Dispose the persistent context.
        context.Dispose();
        // Convert the result to an ASCII string and print it.
        String::AsciiValue ascii(result);
        printf("%s\n", *ascii);
        return 0;
    }
    


    将如下代码段保存为Makefile:

    V8INC  := -I/objs/v8/include
    V8LIB  := /objs/v8/out/ia32.release/obj.target/tools/gyp/libv8_{base,snapshot}.a
    all:helloworld
    helloworld:helloworld.cpp
        g++ -o helloworld helloworld.cpp ${V8INC} ${V8LIB} -lpthread 
    
  • 相关阅读:
    python3安装crypto出错,及解决方法
    php中的引用
    算法
    HTTP协议
    jdk 1.8 InvocationHandler 中文注释
    Java实现多线程的几种方法
    shell编写显示ps相关脚本
    逆波兰表达式求值(后序表达式)
    155. 最小栈(leetcode简单题)
    字符串逆序
  • 原文地址:https://www.cnblogs.com/motadou/p/2914622.html
Copyright © 2011-2022 走看看