问题标签 [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.
python-2.7 - 段错误调用 CPython PyDateTime_FromTimestamp
我将 cpython 和 v8 嵌入在一起,并且在将 javascript 数据转换为PyDateTime
via时遇到了段错误PyDateTime_FromTimestamp
:
运行时我得到以下输出:
timeTuple
关于为什么似乎会导致PyDateTime_FromTimestamp
错误的任何见解?
字符串、数字、布尔值、数组、字典等的转换都可以正常工作。
c++ - Node.js / v8 赋值运算符重载
我的问题很简单,你如何定义 v8 / Node.js 中赋值运算符的行为?
假设我在 C++ 域中有一个类,它有一个set
方法。通常当我写这个 JS 时:
第二次调用new CppWrappedClass(...)
完全替换了jsInstance
新的内容。我想要实现的是,当第二次调用发生时,在其 C++ 后端,我的set
方法被调用。Aka 我定义了赋值运算符的行为。
这甚至可能吗?
c++ - 调用处理程序数据的垃圾收集
我正在尝试向函数调用处理程序提供数据,但我无法正确地垃圾收集它。
如果我注释掉包含“ tpl->SetCallHandler(callFn, external);
”的行,则调用ObjWeakCallback。但是,该函数永远不会被收集(至少FnWeakCallback永远不会被调用,无论如何)。
请注意,静态数据不是一个选项,因为这需要为每个进程的多个隔离做好准备。
isolate->setData
也不是一种选择。我完全错过了什么吗?在里面存储数据的正确方法是什么v8::Function
,有吗?
编辑:让我重新表述这个问题以更好地描述我的意图......
我想创建一个函数模板(因为我需要将它用作 JS 端的构造函数)。我需要某种方式将 void* 发送到它的调用处理程序,但这些数据必须是可回收的。
到目前为止我一直在尝试的一些注意事项:
using
Function::New(isolate, callHandler, External::New(isolate, data))
有效,但不提供 JS 端构造函数能力(无法为创建的对象设置 SetInternalFieldCount)FunctionTemplate::New(isolate, callHandler, External::New(isolate, data))
提供将数据传递给调用处理程序的能力,但永远不会被垃圾收集(<not> 下面的工作示例)我尝试使用普通函数并返回一个新创建的
Object
,但随后以下假设new Fn() instanceof Fn
失败
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 文件?
没用,出现这个错误:
...
谢谢你的帮助。
visual-studio-2013 - 如何为 Windows 编译尽可能小的 V8 库?
我正在为学校制作一个游戏引擎,我想使用 Google 的 V8 来允许在引擎中编写 JavaScript 脚本。该引擎是使用 Visual Studio 2013 编写的,由于最终游戏不得超过 50MB,因此我希望尽可能减小对 V8 文件大小的影响。
在 Internet 上查找如何使用 V8 进行操作时,我发现了一系列关于 V8 的教程,其中包含 V8 的预编译 .lib 文件。然而,它已经四岁了。我假设自己构建一个更新的版本会提高性能并添加功能,所以我昨天花了所有时间在 V8 构建过程中苦苦挣扎,最终想出了如何为 Visual Studio 编译 V8:
- 安装 Google 的“仓库工具”
- 跑
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 是什么意思?我找不到任何关于哪些人做了什么或类似事情的文档。
所以是的,我想如果有人可以提供说明或向我指出任何有帮助的文档,那就太好了。我昨天花了几乎一整天的时间来解决这个问题。
c# - V8.NET (v8dotnet) 单声道
希望有人有一点时间来解释如何将 V8.Net 与 Mono 一起使用。我正在尝试在我的 ubuntu 机器上使用 V8.Net 和 mono 3.10。到目前为止,我做了以下事情:
使用 codeplex 上的内容创建示例项目
/li>将 V8.Net.dll 和 V8.NetSharedTypes 添加到引用中
我将文件夹 /Release/NET 4.0/x64 的内容复制到我的构建目录的 /bin/Debug/x64
当我尝试运行该示例时,我收到以下错误:抛出了一个 system.DllNotFoundException。
我将 Build 类型从 Debug 更改为( Debug | Any cpu )。如果我理解正确,那么库现在应该选择正确的 dll。
6 当我以这种模式重新运行程序时。程序停在:加载的程序集:/Build/v8dotnet/testv8/testv8/bin/test/x64/V8.Net.Proxy.Interface.x64.dll [外部]
调用堆栈显示:V8.Net.V8NetProxy.CreatehandleProxyTest()。
希望您能给我一些意见以使其运行。
c++ - 无法在“回调”函数中访问 V8 上下文
我正在编写一个 NodeJS 插件,其中我使用了一个 C 库,可让您在某些事件中注册回调。当回调被触发时,我想调用一个 NodeJS 回调函数。问题是,在我的 C 回调函数中,当我尝试执行任何与 V8 相关的操作(例如创建 HandleScope)时,会出现分段错误。
在 test.js 中:
在 test.c 中:
编辑:用真实代码更新。
编辑:我刚刚更改了这个问题的标题,因为问题可能是我的回调函数无法访问 V8 上下文。因为我在创建 HandleScope 实例时遇到了分段错误,所以我看不到它可能是什么。除了这个问题,我还试图在 V8 文档中找到答案,但它很大,我没有那么多时间来测试和调查。
c++ - 如何从 C++ 调用 javascript 回调
我试图从我函数的另一个点调用 V8 中的回调。所以这段代码注册了回调:
这个叫它:
可以在我的 C++ 代码中随时随地调用触发函数。我尝试了一个简单的例子(init v8 然后调用触发器),我得到:
这是我的主要内容:
您可以在此处获取整个源代码:
https://github.com/whitedrop/whitedrop/tree/feature/v8
第 386 行是:
编辑:我试过了,感谢 Ben Noordhuis,像这样:
并致电:
但同样的错误:'(
c++ - 静态链接 V8
我有一个与 V8 动态完美配合的项目,但我想静态嵌入它。我可以成功地将 V8 编译为静态的,但是当我将生成的库包含在我的 C++ 项目中(我也将其更改为静态链接)时,我收到如下错误:
我还有很多其他错误。我看到一些帖子提到了 v8.lib,但它不存在。但是,有一个 v8.obj 文件。
任何见解都将受到欢迎,谢谢。
multithreading - 在多线程环境中共享不可变对象/函数(嵌入式 v8)
N00b 问题。我正在考虑将 v8/SpiderMonkey 嵌入到我的服务器代码中。服务器每秒处理数千个请求。所以多线程是必须的。我只是想知道不同的线程是否可以共享编译后的不可变 js 函数和对象?所以我不需要在启动新线程时一次又一次地重新启动它们。谢谢!