问题标签 [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.
erlang - erlang nif 中的 Protobuf 消息和 memcpy
我在 nif 函数(erlang nif)中使用 protobuf,需要创建 protobuf 消息类型的资源。我写了这样的东西:
问题是.. 像这样复制 protobuf 消息是否合法,并且在清理时只需释放它:
? 似乎一切都在这里,但我不舒尔,因为复制对象的构造函数没有被调用,并且可能有一些带有静态变量等的魔法......另外..我需要在 memcpy 之后调用 CopyFrom ?
更新:MyClass 是 C++ 类而不是 C
c - Erlang NIF 来自单个进程在内存中存储结构
我正在编写一个 Erlang C NIF,它只会被一个 Erlang 进程使用。我想创建一个包含指针数组的结构。我需要它存在于进程对 NIF 的调用之间。
我需要了解的是从 Erlang NIF 方面执行此方法的正确方法。我正在考虑在所有函数之外编写一个结构,以便所有人都可以访问它。当我在对 NIF 的一次调用中创建它,然后返回并在对 NIF 的另一次调用中使用它时,它似乎工作得很好。
我担心这可能是因为进程停留在调度线程的本地,因此不必在内存中移动结构和底层数组。
我应该在函数中使用 erlang:memalloc 并避免一起使用全局变量,还是保持原样使用全局结构?
可能返回一个指向包含我所有数据的单个数组的指针?
c - 从 Erlang C NIF 返回指针
在编写 Erlang C NIF 时,如何将在 C 中创建的指针(比如说数组)返回给 Erlang,以供同一个 Erlang 进程在另一个 NIF 调用中使用?
它应该是一个可以返回甚至存储的指针,这样当我从同一个 Erlang 进程中返回到 NIF 时,我可以访问指针和它引用的内存。
c - 为什么 Erlang 没有 C NIF 替代 calloc?
为什么 Erlang 有一个 C NIF 替代malloc
, enif_alloc
,而不是calloc
?从而强制使用memset()
afterenif_alloc
进行数组访问。
erlang - erlang rebar escriptize & nifs
如果我自己编写 escript,我可以使用 nif,但是当我使用 rebar escriptize 时,找不到 nif 函数。我认为这是因为 *.so 对象没有像梁文件那样被打包。这是一个简单的例子;
rebar.config
:
test.erl
:
rebar get-deps 编译 escriptize
./test
结果是
有没有办法克服这个?
erlang - 你如何使用 rebar 设置 Erlang NIF 项目?
我查看了 StackOverflow 上的问题,并在 Google 上搜索了一个在 rebar 中设置 Basic NIF 项目以包装 C++ 库的示例。
我曾经在 GitHub 上库项目作为指南:
我的项目在这里:
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_hook
和post_hook
inrebar.config
被完全忽略了:
无输出示例rebar
:
因为我已经克隆了 tuncer 的 RE2 绑定项目,并且当我rebar compile
从他的 build_deps.sh 脚本中查看输出时。我的权限与他的权限相匹配:
知道我在这里缺少什么吗?我相信钢筋配置正确,可以调用脚本并进行编译。
erlang - 为什么 nif 函数会阻止 Erlang VM 调度其他进程?
当 Erlang VM Beam 运行一些用 C 编写的代码时,其他用 Erlang 编写的进程没有被调度。例如:
当你在 Erlang 中调用这个 C 函数时,其他进程没有正常调度。我想知道为什么?这是一个特性还是受实现的限制(即这是一个错误)?
上面代码的地址在:https ://github.com/davisp/sleepy
c++ - 将图像指针返回到 Erlang
我正在尝试将 openCV 与 Erlang NIF 一起使用。所以我想做一个基本的事情,那就是阅读一张图片并将指针发送回 erlang。并能够再次将收到的指针发回给 C 并显示图片
所以 niftest.cpp 看起来像这样:
我的 niftest.erl 看起来像这样:
所以现在的问题是当我调用 get_pic 时,我得到的回报是{ok, <<>>}
指针根本无效。
当我cout
制作它之前的框架时,enif_make_resource
它有一个值,我可以看到它,但它返回给我是空的!
我做错了什么?我已经阅读了所有文档,但我真的无法弄清楚。
注意:您可以使用以下命令编译代码:
然后运行 erlang shell 并调用 init 和 get_pic 函数
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?