【发布时间】:2022-09-27 22:35:40
【问题描述】:
我已经构建了一个小的 elixir 应用程序,它使用 NIF 函数来执行一些 c++ 代码。 通过以下方式加载 nif:
def load_nifs do
:erlang.load_nif(\'<relative_path_to_lib>/<lib_name>\', 0)
:ok
end
这很好用。 现在我想将此应用程序集成到另一个项目中。现在的问题是 load_nif 抛出:无法加载 NIF 库:\'<relative_path_to_lib>/<lib_name>.so:无法打开共享对象文件:没有这样的文件或目录\'\'虽然什么都没有改变。我检查了 deps 文件夹,共享库文件正是它们应该在的位置,因此依赖项似乎已正确加载。我还尝试将 .so 文件与调用 load_nif 的模块(并省略 <relative_path_to_lib>/)以及提供绝对路径放在同一个文件夹中,但均无济于事。
任何帮助表示赞赏,干杯。
关于我的系统的相关信息:
- 操作系统:Ubuntu 22.04
- Elixir 版本:Elixir 1.13.0(使用 Erlang/OTP 24 编译)
更新:
问题似乎并不在于文件位于错误的位置,因为它在编译后的第一次测试运行期间找到了文件。 但是,当我重复运行时会发生错误。似乎错误消息是错误的,因为在测试期间没有删除任何文件。
如果我在一个测试中多次重复该函数,则没有问题,所以问题不是因为 NIF 函数被执行多次,而是因为包含该函数的测试被重复多次。
标签: elixir-mix erlang-nif