我正在使用Ubuntu 18:04,并有这个C++共享库,我想从一个动态语言工作。
共享库可从此处获得-
http://www.warmplace.ru/soft/sunvox/sunvox_lib-1.9.4c.zip
这是一个小型的嵌入式合成器-提取了zipfile,我使用sunvox_lib/linux/lib_x86/sunvox.so
,并通过chmod 755
更改权限。
它通过ctypes
与Python 3.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_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
的根目录中...
3条答案
按热度按时间lskq00tm1#
我想我用错误的句柄调用了共享对象-您需要删除
.so
后缀-回到绘图板:-(
ql3eal8s2#
从文档erl_dll,
erl_dll:load_driver
是加载一个链接的驱动程序。链接的驱动程序是用一组特定的接口构建的库...我猜共享库不会实现。一种选择是使用共享库创建一个NIF,并从erlang调用NIF。
qfe3c7zg3#
尝试