2

私は窓に取り組んでいます。underscorediscoveryの V8 を使用して、V8 でhello worldを実行しようとしています。これは行でコンパイルできませんでした

// Get the default Isolate created at startup.
  Isolate* isolate = Isolate::GetCurrent();

underscorediscovery ヘッダーを調べたところ、このクラスがヘッダーにないときに、古いライブラリとヘッダーがありました。それは大丈夫でした。この行を削除し、最初の 4 行を次のように置き換えます。

  // Create a stack-allocated handle scope.
  HandleScope handle_scope;

  // Create a new context.
  Handle<Context> context = Context::New();

  // Here's how you could create a Persistent handle to the context, if needed.
  Persistent<Context> persistent_context(context);

そしてそれはうまくいきました。したがって、この Isolate は V8 に新しく追加されました。

次に、node.js をインストールしました。その依存関係の deps フォルダーにも v8 があります。私はnode.jsをビルドし、v8もビルドしました。nodejsのアドオン開発に関する指示に従いました。その「hello world nodejs」は成功しました。クラスIsolateがヘッダーにあるため、実際のGoogleコードも機能するはずだと思いました。しかし、エラーでコンパイルされていません:

error C2664: 'v8::HandleScope::HandleScope(const v8::HandleSc
ope &)' : cannot convert parameter 1 from 'v8::Isolate *' to 'const v8::HandleS
cope &' [C:\Users\asnegi\company\nodejs project\node-v0.10.15\src\my_files\buil
d\v8code.vcxproj]
          Reason: cannot convert from 'v8::Isolate *' to 'const v8::HandleScope
  '
          No constructor could take the source type, or constructor overload re
  solution was ambiguous

C:\Users\abc.node-gyp\0.10.15\deps\v8\include\v8.h のヘッダーを調べます

クラス Isolate が定義されています。また、

template <class T> class Handle {
 public:
  /**
   * Creates an empty handle.
   */
  inline Handle() : val_(0) {}

  /**
   * Creates a new handle for the specified value.
   */
  inline explicit Handle(T* val) : val_(val) {}
  ...........
  ...........

 class HandleScope {
    public:
  inline HandleScope();
  explicit inline HandleScope(Isolate* isolate);
  .....

したがって、Google の Hello world のこの部分は機能するはずです。

// Get the default Isolate created at startup.
  Isolate* isolate = Isolate::GetCurrent();

  // Create a stack-allocated handle scope.
  HandleScope handle_scope(isolate);

  // Create a new context.
  Handle<Context> context = Context::New(isolate);

何が問題ですか ?

4

2 に答える 2

4

Stable Node v0.10.15 は Google V8 バージョン3.14.5(2012-10-22) を使用 C:\Documents\github\node\deps\v8\include\v8.h

class V8EXPORT HandleScope {
 private:
  HandleScope(const HandleScope&);

Unstable Node v0.11.5 は Google V8 バージョン3.20.14(2013-08-07) を使用 C:\Documents\github\node\deps\v8\include\v8.h

class V8_EXPORT HandleScope {
 public:
  // TODO(svenpanne) Deprecate me when Chrome is fixed!
  HandleScope();
  HandleScope(Isolate* isolate);
  ~HandleScope();

node\deps\v8\ChangeLog ファイルから:

2013-03-15: バージョン 3.17.11

v8::Isolate パラメーターを使用して v8::HandleScope コンストラクターのバージョンを追加し、AdjustAmountOfExternalAllocatedMemory を v8::Isolate のインスタンス メソッドにしました。(問題 2487)

于 2013-08-21T12:31:01.103 に答える