こんにちは、Erlang NIF (ネイティブ実装関数) のHello Worldの例を取得しようとしています http://www.erlang.org/doc/man/erl_nif.htmlに示され ている OSX 64 ビットの Elixir から動作します。
まず、C コードを作成します。
/* niftest.c */
#include "erl_nif.h"
static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
return enif_make_string(env, "Hello world!", ERL_NIF_LATIN1);
}
static ErlNifFunc nif_funcs[] =
{
{"hello", 0, hello}
};
ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
gcc
次に、ここで提案されているように、64ビットアーキテクチャ
を使用してコンパイルに成功しましたErlang NIF Test -- OS X Lion
gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include
niftest.so
これにより、 Erlang/Elixir からインターフェイスできるようにするために必要なファイルが生成されます。私の Elixir (niftest.ex) は次のようになります (ここで報告されているより複雑な例に触発されています):
defmodule Niftest do
@onload :init
def init() do
:erlang.load_nif("./niftest", 0)
:ok
end
def hello() do
"NIF library not loaded"
end
end
同じディレクトリにある niftest.so と niftest.ex を使用して、エリクサーを起動しiex
て入力するNiftest.hello
と、「NIF ライブラリがロードされていません」というメッセージが返されます。
私は重要なステップを逃していますか?- 助けてください!