- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我自己编写 escript,我可以使用 nif,但是当我使用 rebar escriptize 时,找不到 nif 函数。我认为这是因为 *.so 对象没有像 Beam 文件那样被打包。这是一个简单的例子;
rebar.config
:
{deps, [
{'jiffy', "", {git, "https://github.com/davisp/jiffy.git", {branch, master}}}
]}.
{escript_incl_apps, [jiffy]}.
%% I tried this to see what happens if the so got in there but didn't help
{escript_incl_extra, [{"deps/jiffy/priv/jiffy.so", "/path/to/my/proj"}]}.
test.erl
:
-module(test).
-export([main/1]).
main(_Args) ->
jiffy:decode(<<"1">>),
ok.
rebar get-deps 编译 escriptize
./测试
结果是
escript: exception error: undefined function jiffy:decode/1
in function test:main/1 (src/test.erl, line 7)
in call from escript:run/2 (escript.erl, line 741)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_it/1
in call from init:start_em/1
有办法克服这个问题吗?
最佳答案
问题是 erlang:load_nif/1
函数不隐式使用任何搜索路径也不在尝试查找时做任何明智的事情.so
文件。它只是尝试按文件名参数给出的字面意思加载文件。如果它不是绝对文件名,那么它将尝试加载相对于当前工作目录的文件。它完全加载您告诉它加载的内容。
因此,如果您调用 erlang:load_nif("jiffy.so")
那么它会尝试从您当前的工作目录加载 "jiffy.so"
。我使用的一个简单的解决方法是使用 NIF_DIR
环境变量执行类似的操作:
load_nifs() ->
case os:getenv("NIF_DIR") of
false -> Path = ".";
Path -> Path
end,
ok = erlang:load_nif(Path ++ "/gpio_nifs", 0).
这可以轻松扩展以循环搜索路径来查找文件。请注意,NIF_DIR
并不是一个特殊的名称,只是我“发明”的一个名称。
关于Erlang Rebar escriptize 和 nifs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617798/
在实现 NIF 时,Dialyzer 给了我 Function crc16/1 has no local return 可能是因为我做退出在 .erl 模块中(如官方文档推荐): -module(my
我正在编写一些 Erlang 代码,它基本上从 TCP 连接接受一些二进制数据,然后使用 C nif 解密数据并返回解密的数据。 问题是我似乎无法弄清楚如何修改传入的二进制文件。 这是我正在使用的功能
我会想,如果我所做的只是 1) 加载一个 NIF 库,2) 执行我的 new/0 方法,3) 通过 F() 释放一切,然后 4) erlang:garbage:collect()我会回到内存的起点。事
我正在尝试为简单的线性代数实现 NIF。这是我的矩阵内部结构: typedef struct la_matrix { uint rows, columns; double **data; }
我创建了一个 DLL“Addition.dll”,我在其中实现了 hello 函数这些是我用于创建库的文件: main.cpp : #include "main.h" //Hello function
我正在试验 NIF,但我对 Erlang 使用的数字类型感到困惑,因为我对自己的精确度感到有些奇怪。 这是一个例子: erlang:band(18446744073709551614, 5) == 4
我对 Erlang NIF 中的线程有一个小问题。您可以在这里查看我的代码:http://pastebin.com/HMCj24Jp .问题是,当我启动线程时,它需要一些参数并启动 generate_
我有一个通过串行端口实现特殊协议(protocol)的 C++ 代码。代码是多线程的,内部轮询串口并做自己的循环处理。我想从 erlang 调用这个驱动程序并接收来自这个驱动程序的事件。我担心的是这个
我有点困惑,当我创建一个脏 NIF(例如,通过在其 ErlNifFunc 条目中为脏 NIF 设置适当的标志值)时,这会创建一个在脏线程上运行的脏调度程序。 我知道我只能有 N 个 cpu-bond
如果我自己编写 escript,我可以使用 nif,但是当我使用 rebar escriptize 时,找不到 nif 函数。我认为这是因为 *.so 对象没有像 Beam 文件那样被打包。这是一个简
NIF 实现可以使用常规 C/C++ 线程锁定原语还是必须使用 NIF API(enif_mutex_lock(..)、enif_mutex_create(..)、 等) 最佳答案 来自 nif do
我发现Elixir程序可以通过NIFs (native implemented functions)或OS-level ports运行C代码。阅读了这些链接和类似链接后,我不清楚何时使用一种或另一种方
我打算使用 NIF 为我计划在 Erlang 中编写代码的应用程序操作二进制文件。下面给出了 NIF 的 cpp 文件和 erl 文件的要点链接。 [Erl 要点链接] https://gist.gi
是否可以从 NIF 调用 Erlang 函数(回调函数)? 我阅读了文档(http://www.erlang.org/doc/man/erl_nif.html),但没有找到如何做到这一点。 最佳答案
我观察到 C NIF 在被许多 Erlang 进程同时调用时的阻塞行为。可以做成非阻塞的吗?这里有我无法理解的互斥锁吗? 附言在特定的 PID 调用它的情况下,可以通过使其 sleep 一百个微秒来测
在编写 Erlang C NIF 时,如何将用 C 创建的指针(比如说数组)返回到 Erlang,以便稍后在另一个 NIF 调用中由同一 Erlang 进程使用? #define LENGTH =
我尝试使用 cygwin gcc 在 Windows 上编译一个 erlang nif 插件。它编译正常,但链接器出现一些错误: 对 `_enif_get_int' 的 undefined refer
我在尝试将我的共享库(erlang nif)链接到另一个使用 dlopen 加载其他共享库(插件)的共享库(libpurple)时遇到问题。 问题是 mylib.so 链接到 libpurple.so
当 Erlang VM beam 运行一些用 C 编写的代码时,其他用 Erlang 编写的进程没有被调度。例如: static ERL_NIF_TERM nifsleep(ErlNi
我正在使用 NIF 进行 C-Erlang 集成,但在初始化 Binary 时遇到了一些问题并添加 char*指向它的数据。 我是这样做的: ErlNifBinary *output_binary;
我是一名优秀的程序员,十分优秀!