基本示例的 V8 编译错误

Posted

技术标签:

【中文标题】基本示例的 V8 编译错误【英文标题】:V8 compile error for basic example 【发布时间】:2012-07-02 03:44:51 【问题描述】:

我正在尝试为 V8 编译 hello world 示例,但一直遇到编译时错误。代码如下:

#include <v8/src/v8.h>

using namespace v8;

int main(int argc, char* argv[]) 

  // Create a string holding the javascript source code.
  String source = String::New("Hi");

  // Compile it.
  Script script = Script::Compile(source) ;

  // Run it.
  Value result = script->Run();

  // Convert the result to an ASCII string and display it.
  String::AsciiValue ascii(result) ;
  printf("%s\n", *ascii) ;
  return 0;

这是编译错误:

error: conversion from ‘v8::Local<v8::String>’ to non-scalar type ‘v8::String’ requested

第 8 行的错误是:String source = String::New("Hi");

我已经尝试用谷歌搜索这个错误,但似乎找不到有意义的修复方法。有什么想法吗?

我都试过了:

svn 结帐http://v8.googlecode.com/svn/trunk/v8

svn 结帐http://v8.googlecode.com/svn/branches/bleeding_edge/v8

两者都得到相同的错误。

【问题讨论】:

哪一行给出了错误? 第 8 行出现错误。我更新了帖子以反映这一点。 您尝试的代码大致解释了发生了什么。您应该使用的真实代码位于本文后面。 【参考方案1】:

根据错误信息,尝试:

Local<String> source = String::New("Hi");

【讨论】:

这修复了错误,但现在我得到一个新错误:未定义引用 `v8::String::New(char const*, int)'| (它没有特别引用任何行) @user396404:现在听起来像是链接器错误。确保你传入了正确的库。 我已经通过了 v8.h。应该有其他图书馆吗? @user396404:这是一个头文件,Javascript 引擎不是一个只有头文件的库。链接时还需要.lib 文件(在 Windows 上)或.a.so 文件(在 Linux 上)。【参考方案2】:

试试这个代码:

HandleScope handle_scope;
Persistent<Context> context = Context::New();
Context::Scope context_scope(context);
Handle<String> source = String::New("'Hello' + ', World!'");
Handle<Script> script = Script::Compile(source);
TryCatch trycatch;
Handle<Value> result = script->Run();   
if ( result.IsEmpty() ) 
    Handle<Value> excep = trycatch.Exception();
    String::AsciiValue excep_str(excep);
    printf("%s\n",*excep);
  else 
    String::AsciiValue ascii(result);
    printf("%s\n", *ascii);

context.Dispose();
return 0;

【讨论】:

以上是关于基本示例的 V8 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

错误 此版本的 node/NAN/v8 需要 C++11 编译器

错误 此版本的 node/NAN/v8 需要 C++11 编译器

编译 CUDA cuSolver 特征值示例时出现编译错误

XCode HealthThermometer 示例编译错误

VS2017:“找不到资源编译器 DLL。请确保路径正确。”

C++ 唯一指针;为啥这个示例代码会出现编译错误?错误代码太长了,我无法指定