Проблемы с компиляцией V8 - PullRequest
4 голосов
/ 28 июня 2010

Я пытаюсь скомпилировать файл с V8 движком JavaScript от Google.Я установил scons и скомпилировал двигатель V8.Но вот в чем проблема, я остаюсь в каталоге V8, как говорится, и создаю файл с именем hello_world.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;
    }

Затем компилирую, используя gcc hello_world.cpp -o libv8.a.Но, когда я компилирую это, я получаю перекос ошибок:

hello_world.cpp:1:16: error: v8.h: No such file or directory
hello_world.cpp:3: error: ‘v8’ is not a namespace-name
hello_world.cpp:3: error: expected namespace-name before ‘;’ token
hello_world.cpp: In function ‘int main(int, char**)’:
hello_world.cpp:8: error: ‘HandleScope’ was not declared in this scope
hello_world.cpp:8: error: expected `;' before ‘handle_scope’
hello_world.cpp:11: error: ‘Persistent’ was not declared in this scope
hello_world.cpp:11: error: ‘Context’ was not declared in this scope
hello_world.cpp:11: error: ‘context’ was not declared in this scope
hello_world.cpp:11: error: ‘Context’ is not a class or namespace
hello_world.cpp:15: error: ‘Context’ is not a class or namespace
hello_world.cpp:15: error: expected `;' before ‘context_scope’
hello_world.cpp:18: error: ‘Handle’ was not declared in this scope
hello_world.cpp:18: error: ‘String’ was not declared in this scope
hello_world.cpp:18: error: ‘source’ was not declared in this scope
hello_world.cpp:18: error: ‘String’ is not a class or namespace
hello_world.cpp:21: error: ‘Script’ was not declared in this scope
hello_world.cpp:21: error: ‘script’ was not declared in this scope
hello_world.cpp:21: error: ‘Script’ is not a class or namespace
hello_world.cpp:24: error: ‘Value’ was not declared in this scope
hello_world.cpp:24: error: ‘result’ was not declared in this scope
hello_world.cpp:30: error: ‘String’ is not a class or namespace
hello_world.cpp:30: error: expected `;' before ‘ascii’
hello_world.cpp:31: error: ‘ascii’ was not declared in this scope
hello_world.cpp:31: error: ‘printf’ was not declared in this scope

Я не понимаю, почему он говорит, что V8.h не объявлен.Я уже построил его, и я нахожусь в его каталоге, и я думаю, если я избавлюсь от этого, все другие ошибки исчезнут.Есть предложения?

1 Ответ

3 голосов
/ 28 июня 2010

Я просто верю, что вы на самом деле находитесь внутри исходного каталога верхнего уровня (и поскольку я не скомпилировал v8, я верю только, что libvp8.a создан в этом верхнем каталоге):

% g++ -Iinclude hello_world.cpp -o hello_world libv8.a
  1. он говорит, что "v8.h" не объявлен, потому что этот файл находится внутри каталога "include" и препроцессор не может найти его из ничего.

  2. более того: вы компилируете файл .cpp с помощью компилятора C вместо компилятора C ++.

  3. вы используете '-o'флаг неправильный, потому что он определяет имя связанного двоичного файла и, следовательно, нуждается в имени; вы не хотите, чтобы выходной двоичный файл назывался "libvp8.a"

...