问题标签 [embedded-v8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
106 浏览

python-2.7 - 段错误调用 CPython PyDateTime_FromTimestamp

我将 cpython 和 v8 嵌入在一起,并且在将 javascript 数据转换为PyDateTimevia时遇到了段错误PyDateTime_FromTimestamp

运行时我得到以下输出:

timeTuple关于为什么似乎会导致PyDateTime_FromTimestamp错误的任何见解?

字符串、数字、布尔值、数组、字典等的转换都可以正常工作。

0 投票
0 回答
333 浏览

c++ - Node.js / v8 赋值运算符重载

我的问题很简单,你如何定义 v8 / Node.js 中赋值运算符的行为?

假设我在 C++ 域中有一个类,它有一个set方法。通常当我写这个 JS 时:

第二次调用new CppWrappedClass(...)完全替换了jsInstance新的内容。我想要实现的是,当第二次调用发生时,在其 C++ 后端,我的set方法被调用。Aka 我定义了赋值运算符的行为。

这甚至可能吗?

0 投票
1 回答
735 浏览

c++ - 调用处理程序数据的垃圾收集

我正在尝试向函数调用处理程序提供数据,但我无法正确地垃圾收集它。

如果我注释掉包含“ tpl->SetCallHandler(callFn, external);”的行,则调用ObjWeakCallback。但是,该函数永远不会被收集(至少FnWeakCallback永远不会被调用,无论如何)。

请注意,静态数据不是一个选项,因为这需要为每个进程的多个隔离做好准备。 isolate->setData也不是一种选择。我完全错过了什么吗?在里面存储数据的正确方法是什么v8::Function,有吗?


编辑:让我重新表述这个问题以更好地描述我的意图......

我想创建一个函数模板(因为我需要将它用作 JS 端的构造函数)。我需要某种方式将 void* 发送到它的调用处理程序,但这些数据必须是可回收的。

到目前为止我一直在尝试的一些注意事项:

  • usingFunction::New(isolate, callHandler, External::New(isolate, data))有效,但不提供 JS 端构造函数能力(无法为创建的对象设置 SetInternalFieldCount)

  • FunctionTemplate::New(isolate, callHandler, External::New(isolate, data))提供将数据传递给调用处理程序的能力,但永远不会被垃圾收集(<not> 下面的工作示例)

  • 我尝试使用普通函数并返回一个新创建的Object,但随后以下假设new Fn() instanceof Fn失败


0 投票
1 回答
209 浏览

arangodb - 如何使用已安装的 v8 配置和编译 ArangoDB

我正在尝试在运行 Debian for armhf 的 Cubietruck 板中编译 ArandoDB 2.2.3 由于 3rdParty V8 将无法编译并会抛出错误“#error Target architecture ia32 is only supported on ia32 host”,我决定安装 libv8-dev,所以我的系统拥有 ArangoDB 所需的所有头文件和库。如何告诉 ArangoDB 配置实用程序使用当前的 v8 头文件和 lib 文件?

没用,出现这个错误:

...

谢谢你的帮助。

0 投票
2 回答
7743 浏览

visual-studio-2013 - 如何为 Windows 编译尽可能小的 V8 库?

我正在为学校制作一个游戏引擎,我想使用 Google 的 V8 来允许在引擎中编写 JavaScript 脚本。该引擎是使用 Visual Studio 2013 编写的,由于最终游戏不得超过 50MB,因此我希望尽可能减小对 V8 文件大小的影响。

在 Internet 上查找如何使用 V8 进行操作时,我发现了一系列关于 V8 的教程,其中包含 V8 的预编译 .lib 文件。然而,它已经四岁了。我假设自己构建一个更新的版本会提高性能并添加功能,所以我昨天花了所有时间在 V8 构建过程中苦苦挣扎,最终想出了如何为 Visual Studio 编译 V8:

  1. 安装 Google 的“仓库工具”
  2. fetch v8

这为我提供了生成 V8 Visual Studio 解决方案所需的一切,当我编译它时,它可以工作并生成 .lib 和 .dll 文件。但是,当我尝试创建一个测试解决方案并将这些库链接到它时,这令人难以置信的混乱。

构建过程会生成以下 LIB 文件:

  • cctest.lib
  • gmock.lib
  • gtest.lib
  • icui18n.lib
  • icuuc.lib
  • mksnapshot.lib
  • 单元测试.lib
  • v8.lib
  • v8_base.lib
  • v8_libbase.lib
  • v8_libplatform.lib
  • v8_nosnapshot.lib
  • v8_snapshot.lib

以及以下 DLL:

  • icudt.dll
  • icui18n.dll
  • icuuc.dll
  • v8.dll

昨天的某个时候,我包含了许多库(我认为它是 v8、v8_base 和 v8_snapshot)并将所有 DLL 复制到我项目的输出目录中,它最终工作了。但是,正如我上面所说,我需要 V8 对文件大小的影响尽可能小。我不需要 i18n 支持,那么有没有办法在没有它的情况下进行编译?就像我上面说的,我有一个旧版本的 V8 .lib,它不需要 DLL 来运行,它编译和工作正常......但我错过了新的功能和改进,因为它是四年老的?无论如何,所有这些 .lib 是什么意思?我找不到任何关于哪些人做了什么或类似事情的文档。

所以是的,我想如果有人可以提供说明或向我指出任何有帮助的文档,那就太好了。我昨天花了几乎一整天的时间来解决这个问题。

0 投票
1 回答
1084 浏览

c# - V8.NET (v8dotnet) 单声道

希望有人有一点时间来解释如何将 V8.Net 与 Mono 一起使用。我正在尝试在我的 ubuntu 机器上使用 V8.Net 和 mono 3.10。到目前为止,我做了以下事情:

  1. 使用 codeplex 上的内容创建示例项目

    /li>
  2. 将 V8.Net.dll 和 V8.NetSharedTypes 添加到引用中

  3. 我将文件夹 /Release/NET 4.0/x64 的内容复制到我的构建目录的 /bin/Debug/x64

  4. 当我尝试运行该示例时,我收到以下错误:抛出了一个 system.DllNotFoundException。

  5. 我将 Build 类型从 Debug 更改为( Debug | Any cpu )。如果我理解正确,那么库现在应该选择正确的 dll。

6 当我以这种模式重新运行程序时。程序停在:加载的程序集:/Build/v8dotnet/testv8/testv8/bin/test/x64/V8.Net.Proxy.Interface.x64.dll [外部]

调用堆栈显示:V8.Net.V8NetProxy.CreatehandleProxyTest()。

希望您能给我一些意见以使其运行。

0 投票
2 回答
1316 浏览

c++ - 无法在“回调”函数中访问 V8 上下文

我正在编写一个 NodeJS 插件,其中我使用了一个 C 库,可让您在某些事件中注册回调。当回调被触发时,我想调用一个 NodeJS 回调函数。问题是,在我的 C 回调函数中,当我尝试执行任何与 V8 相关的操作(例如创建 HandleScope)时,会出现分段错误。

在 test.js 中:

在 test.c 中:

编辑:用真实代码更新。

编辑:我刚刚更改了这个问题的标题,因为问题可能是我的回调函数无法访问 V8 上下文。因为我在创建 HandleScope 实例时遇到了分段错误,所以我看不到它可能是什么。除了这个问题,我还试图在 V8 文档中找到答案,但它很大,我没有那么多时间来测试和调查。

0 投票
2 回答
3470 浏览

c++ - 如何从 C++ 调用 javascript 回调

我试图从我函数的另一个点调用 V8 中的回调。所以这段代码注册了回调:

这个叫它:

可以在我的 C++ 代码中随时随地调用触发函数。我尝试了一个简单的例子(init v8 然后调用触发器),我得到:

这是我的主要内容:

您可以在此处获取整个源代码:

https://github.com/whitedrop/whitedrop/tree/feature/v8

第 386 行是:

编辑:我试过了,感谢 Ben Noordhuis,像这样:

并致电:

但同样的错误:'(

0 投票
1 回答
1313 浏览

c++ - 静态链接 V8

我有一个与 V8 动态完美配合的项目,但我想静态嵌入它。我可以成功地将 V8 编译为静态的,但是当我将生成的库包含在我的 C++ 项目中(我也将其更改为静态链接)时,我收到如下错误:

我还有很多其他错误。我看到一些帖子提到了 v8.lib,但它不存在。但是,有一个 v8.obj 文件。

任何见解都将受到欢迎,谢谢。

0 投票
1 回答
231 浏览

multithreading - 在多线程环境中共享不可变对象/函数(嵌入式 v8)

N00b 问题。我正在考虑将 v8/SpiderMonkey 嵌入到我的服务器代码中。服务器每秒处理数千个请求。所以多线程是必须的。我只是想知道不同的线程是否可以共享编译后的不可变 js 函数和对象?所以我不需要在启动新线程时一次又一次地重新启动它们。谢谢!