打开C+时出错+;作为Erlang端口驱动程序的共享库

打开C+时出错+;作为Erlang端口驱动程序的共享库,erlang,erlang-ports,Erlang,Erlang Ports,共享库可从此处获得- 这是一个小型嵌入式合成器-提取了我正在使用的zipfilesunvox_lib/linux/lib_x86/sunvox.so并通过chmod 755更改权限 它可以通过ctypes与Python3.6配合使用,因此我认为它没有损坏- (sv_demo) justin@justin-XPS-13-9360:~/work/sv_demo$ python Python 3.6.8 (default, Dec 24 2018, 19:24:27) [GCC 5.4.0 201

共享库可从此处获得-

这是一个小型嵌入式合成器-提取了我正在使用的zipfile
sunvox_lib/linux/lib_x86/sunvox.so
并通过
chmod 755
更改权限

它可以通过
ctypes
与Python3.6配合使用,因此我认为它没有损坏-

(sv_demo) justin@justin-XPS-13-9360:~/work/sv_demo$ python
Python 3.6.8 (default, Dec 24 2018, 19:24:27) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import cdll
>>> sv.sv_init(0, 44100, 2, 0) 
Desired audio buffer size: 2048 frames
ALSA: pulse
ALSA HW Default rate: 44100
ALSA HW Rate: 44100 frames
ALSA HW Buffer size: 4096 frames
ALSA HW Period size: 227
ALSA HW Periods: 0
ALSA SW Avail min: 227
ALSA SW Start threshold: 1   
ALSA SW Stop threshold: 4096
67844
>>> sv.sv_deinit()
SOUND: sundog_sound_deinit() begin
SOUND: sundog_sound_deinit() end
Max memory used: 41823
0
>>> exit()
(sv_demo) justin@justin-XPS-13-9360:~/work/sv_demo$ 
然而,我确实希望/需要使用Erlang,而不是Python;并希望通过端口驱动机制实现这一点。但是-

(sv_demo) justin@justin-XPS-13-9360:~/work/sv_demo$ erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]    
Eshell V9.3  (abort with ^G)
1> erl_ddll:load_driver(".", "sunvox.so").
{error,{open_error,-10}}
{open\u error,-10}
是什么意思?我以前与端口驱动程序打过交道,没有遇到过这个问题。我在谷歌上搜索了一下,但找不到Python乐意使用它但Erlang不愿意的原因

有什么想法吗

短暂性脑缺血发作


更新

2> erl_ddll:format_error({open_error, -10}).
"cannot open shared object file: No such file or directory"

为什么它找不到sunvox.so?它位于我正在运行的目录根中,
erl

我想我调用的共享对象的句柄错误-您需要删除
。因此
后缀-

Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.3  (abort with ^G)
1> erl_ddll:load_driver(".", "sunvox").   
{error,no_driver_init}
2> erl_ddll:format_error(no_driver_init).         
"No driver init in dynamic library"
3> 
回到绘图板:-(

从文档中,
erl\u dll:load\u driver
是加载链接的in驱动程序。链接的驱动程序是用一组特定的接口构建的库……我猜共享库不会实现

一个选项是使用共享库创建NIF,并从erlang调用NIF