我翻看了StackOverflow上的問題,並搜索了一個設置用於包裝C++庫的鋼筋基本NIF項目的示例。你如何用鋼筋設置Erlang NIF項目?
我用庫項目在GitHub上作爲指導:
我的項目是在這裏:
https://github.com/project-z/emutton/
當我做了rebar compile && rebar eunit
,我得到一個失敗的eunit測試,因爲它找不到emtn.so
:
$ rebar compile && rebar eunit
==> emutton (compile)
==> emutton (eunit)
undefined
*** test module not found ***
**emtn
=ERROR REPORT==== 25-Jun-2013::12:21:55 ===
The on_load function for module emtn returned {error,
{load_failed,
"Failed to load NIF library: 'dlopen(/.../source/emutton/priv/emtn.so, 2): image not found'"}}
=======================================================
Failed: 0. Skipped: 0. Passed: 0.
One or more tests were cancelled.
ERROR: One or more eunit tests failed.
ERROR: eunit failed while processing /.../source/emutton: rebar_abort
當我打電話rebar compile
,只生產單一的驅動程序文件,emtn_drv.so
沒有emtn.so
:
$ tree priv
priv
└── emtn_drv.so
0 directories, 1 file
我有c_src/build_deps.sh
echo聲明,我沒有看到輸出,當我打電話rebar clean
。它似乎表現得好像我pre_hook
和rebar.config
post_hook
被完全忽略:
$ rebar compile
==> emutton (compile)
$ rebar clean
==> emutton (clean)
因爲我已經克隆tuncer的RE2綁定項目,當我這樣做:沒有來自rebar
顯示輸出的
{pre_hooks, [{compile, "c_src/build_deps.sh"}]}.
{post_hooks, [{clean, "c_src/build_deps.sh clean"}]}.
例子一個rebar compile
看到他的build_deps.sh腳本的輸出。在我的權限匹配他的:
-rwxr-xr-x 1 ajl staff 891B Jun 25 12:30 c_src/build_deps.sh
任何想法我在這裏失蹤?我相信鋼筋配置正確,可以調用腳本並進行編譯。
謝謝尼姆 - 我選擇了第二種方法。我沒有看到如何控制共享庫的名稱,它始終是「emtn_drv.so」(不管我如何命名文件/ etc)。 這裏提交更改: https://github.com/project-z/emutton/commit/2e7eed36ebbff39681a85860fc5fdcedda58fe1b – lenards
其實我想通了,我的問題,我的螺紋鋼。config文件實際上被命名爲'「rebar.config」',最後有兩個空格。我甚至不願意承認我犯了這個錯誤,但我不得不承認螺紋鋼郵件列表上的人員已經足夠了,可以試着回答我的問題。所以,我的愚蠢的錯誤。 現在我的'rebar.config'正確命名了,emtn.so&emtn_drv.so正確地在'/ priv /'中構建。 – lenards