问题标签 [erlang-nif]

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 回答
638 浏览

erlang - erlang nif 中的 Protobuf 消息和 memcpy

我在 nif 函数(erlang nif)中使用 protobuf,需要创建 protobuf 消息类型的资源。我写了这样的东西:

问题是.. 像这样复制 protobuf 消息是否合法,并且在清理时只需释放它:

? 似乎一切都在这里,但我不舒尔,因为复制对象的构造函数没有被调用,并且可能有一些带有静态变量等的魔法......另外..我需要在 memcpy 之后调用 CopyFrom ?

更新:MyClass 是 C++ 类而不是 C

0 投票
1 回答
1173 浏览

c - Erlang NIF 来自单个进程在内存中存储结构

我正在编写一个 Erlang C NIF,它只会被一个 Erlang 进程使用。我想创建一个包含指针数组的结构。我需要它存在于进程对 NIF 的调用之间。

我需要了解的是从 Erlang NIF 方面执行此方法的正确方法。我正在考虑在所有函数之外编写一个结构,以便所有人都可以访问它。当我在对 NIF 的一次调用中创建它,然后返回并在对 NIF 的另一次调用中使用它时,它似乎工作得很好。

我担心这可能是因为进程停留在调度线程的本地,因此不必在内存中移动结构和底层数组。

我应该在函数中使用 erlang:memalloc 并避免一起使用全局变量,还是保持原样使用全局结构?

可能返回一个指向包含我所有数据的单个数组的指针?

0 投票
2 回答
555 浏览

c - 从 Erlang C NIF 返回指针

在编写 Erlang C NIF 时,如何将在 C 中创建的指针(比如说数组)返回给 Erlang,以供同一个 Erlang 进程在另一个 NIF 调用中使用?

它应该是一个可以返回甚至存储的指针,这样当我从同一个 Erlang 进程中返回到 NIF 时,我可以访问指针和它引用的内存。

0 投票
1 回答
870 浏览

c - 在 Erlang C NIF 中分配内存

为什么要使用

尝试从 Erlang C NIF 分配内存时?

参考并没有详细说明原因。

http://www.erlang.org/doc/man/erl_nif.html#enif_alloc

0 投票
1 回答
218 浏览

c - 为什么 Erlang 没有 C NIF 替代 calloc?

为什么 Erlang 有一个 C NIF 替代malloc, enif_alloc,而不是calloc?从而强制使用memset()afterenif_alloc进行数组访问。

0 投票
2 回答
2201 浏览

erlang - erlang rebar escriptize & nifs

如果我自己编写 escript,我可以使用 nif,但是当我使用 rebar escriptize 时,找不到 nif 函数。我认为这是因为 *.so 对象没有像梁文件那样被打包。这是一个简单的例子;

rebar.config

test.erl

rebar get-deps 编译 escriptize
./test

结果是

有没有办法克服这个?

0 投票
1 回答
1820 浏览

erlang - 你如何使用 rebar 设置 Erlang NIF 项目?

我查看了 StackOverflow 上的问题,并在 Google 上搜索了一个在 rebar 中设置 Basic NIF 项目以包装 C++ 库的示例。

我曾经在 GitHub 上库项目作为指南:

https://github.com/tuncer/re2

我的项目在这里:

https://github.com/project-z/emutton/

当我做 arebar compile && rebar eunit时,我在 eunit 测试中失败,因为它找不到emtn.so

当我调用rebar compile时,它只生成一个驱动程序文件,emtn_drv.so而不是emtn.so

我有一个 echo 语句,c_src/build_deps.sh当我调用rebar clean. 它似乎表现得好像 mypre_hookpost_hookinrebar.config被完全忽略了:

无输出示例rebar

因为我已经克隆了 tuncer 的 RE2 绑定项目,并且当我rebar compile从他的 build_deps.sh 脚本中查看输出时。我的权限与他的权限相匹配:

知道我在这里缺少什么吗?我相信钢筋配置正确,可以调用脚本并进行编译。

0 投票
1 回答
887 浏览

erlang - 为什么 nif 函数会阻止 Erlang VM 调度其他进程?

当 Erlang VM Beam 运行一些用 C 编写的代码时,其他用 Erlang 编写的进程没有被调度。例如:

当你在 Erlang 中调用这个 C 函数时,其他进程没有正常调度。我想知道为什么?这是一个特性还是受实现的限制(即这是一个错误)?

上面代码的地址在:https ://github.com/davisp/sleepy

0 投票
1 回答
514 浏览

c++ - 将图像指针返回到 Erlang

我正在尝试将 openCV 与 Erlang NIF 一起使用。所以我想做一个基本的事情,那就是阅读一张图片并将指针发送回 erlang。并能够再次将收到的指针发回给 C 并显示图片

所以 niftest.cpp 看起来像这样:

我的 niftest.erl 看起来像这样:

所以现在的问题是当我调用 get_pic 时,我得到的回报是{ok, <<>>}指针根本无效。

当我cout制作它之前的框架时,enif_make_resource它有一个值,我可以看到它,但它返回给我是空的!

我做错了什么?我已经阅读了所有文档,但我真的无法弄清楚。

注意:您可以使用以下命令编译代码:

然后运行 ​​erlang shell 并调用 init 和 get_pic 函数

0 投票
1 回答
301 浏览

erlang - erl_nif_thread and erlang process communication

Can we communicate with erl_nif thread created and normal erlang process? We can send messages from nif thread to erlang process using nif_send but can nif thread receive messages from any erlang process like normal erlang process do?