LA_*_*LA_ 12 c++ python z-wave
我手动编译python-openzwave以使用C++库.
我想用它作为Kodi插件(在Pi 3上运行的OpenELEC),所以不能使用标准安装.我编译了所有内容,下载了缺失six和louie库,现在尝试运行hello_world.py.
我目前的目标结构如下:
- root
- bin
- .lib
- config
Alarm.o
...
libopenzwave.a
libopenzwave.so
libopenzwave.so.1.4
...
- libopenzwave
driver.pxd
group.pxd
...
- louie
__init__.py
dispatcher.py
...
- openzwave
__init__.py
command.py
...
six.py
hello_world.py
Run Code Online (Sandbox Code Playgroud)
但是当我运行hello_world.py时,我收到以下错误 -
Traceback (most recent call last):
File "hello_world.py", line 40, in <module>
from openzwave.controller import ZWaveController
File "/storage/.kodi/addons/service.multimedia.open-zwave/openzwave/controller.py", line 34, in <module>
from libopenzwave import PyStatDriver, PyControllerState
ImportError: No module named libopenzwave
Run Code Online (Sandbox Code Playgroud)
如果我移动libopenzwave.a,并libopenzwave.so以根文件夹,然后我得到以下错误:
Traceback (most recent call last):
File "hello_world.py", line 40, in <module>
from openzwave.controller import ZWaveController
File "/storage/.kodi/addons/service.multimedia.open-zwave/openzwave/controller.py", line 34, in <module>
from libopenzwave import PyStatDriver, PyControllerState
ImportError: dynamic module does not define init function (initlibopenzwave)
Run Code Online (Sandbox Code Playgroud)
我的设置有什么问题?
一般来说,所需的步骤包括调用为 openzwavemake build构建文件的句柄并下载所有依赖项(包括);并运行, (此安装脚本还为 openzwave 创建 Python 扩展)和..cppCythonmake installsetup-apisetup-lib.pyC++setup-web.pysetup-manager.py
由于您无法make install按照指定的方式运行,而是使用它们提供的存档,因此在使用 构建 openzwave 库后,创建 python 扩展的唯一其他选项make build是.so为其生成文件,而不安装到标准位置。
通过运行以下命令在与脚本相同的文件夹中构建.socython 扩展:Cython
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
src-lib这应该在命名中创建一个共享库libopenzwave.so(它与目录libopenzwave.so中包含的不同bin/),其中包含扩展模块中指定的所有功能。您可以尝试将其添加到libopenzwave文件夹中。
如果您在make build构建 openzwave 库期间传递了特殊的编译器标志,则应在执行setup-lib.py脚本时指定相同的编译器标志。CFLAGS这可以通过在执行之前指定(如此处指定的)来完成,否则您可能会遇到诸如 之类的问题error adding symbols: File in wrong format。