Интегрировать клиент aerospike в среду erlang как глобальный модуль

Я хочу интегрировать клиент erlang aerospike в среду erlang в качестве глобального модуля в Fedora 21. Я делаю клиент nif и модуль, но мне всегда приходится копировать файлы в каждом проекте. Теперь я хочу использовать модуль aerospike, такой как модули erlang или os. Как я могу это сделать?


person jasmad    schedule 07.05.2015    source источник


Ответы (1)


У меня была такая же проблема, когда я экспериментировал с креплением Aerospike. Проблема в том, что предполагается, что файл .so находится в текущем рабочем каталоге. Я внес небольшое изменение в aerospike.erl, чтобы он располагался правильно, независимо от пути.

Заменять

ok = erlang:load_nif("./aerospike_nif", 0).

in init()

с

  EbinDir = filename:dirname(code:which(?MODULE)),
  SoFile  = filename:join(EbinDir,"aerospike_nif"),
  erlang:load_nif(SoFile, 0).

При запуске erl добавить путь к каталогу, содержащему файлы луча Aerospike и .so: erl -pa path_to_aerospike/erlang/

person johlo    schedule 07.05.2015
comment
Я могу работать с этим, спасибо. что означает эта фраза? code:which(?MODULE) - person jasmad; 11.05.2015
comment
?MODULE — это макрос, который оценивается как имя текущего модуля, в данном случае aerospike. code:which/1 возвращает абсолютный путь к файлу, содержащему определение модуля. - person johlo; 11.05.2015