我正试图将我的程序编译成一个共享库,可以在使用ctypes的Python代码中使用它。
库可以使用以下命令进行精细编译:
g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config --libs --cflags opencv`
但是,当我尝试使用ctypes导入它时
from ctypes import *
mylib = CDLL("/path/to/mylib.so")
print mylib.test() // Expected output: Hello World
我得到以下错误:
libdc1394 error: Failed to initialize libdc1394
怎么了?
libdc1394
是一个用于控制相机硬件的库。我想是你链接的opencv。可能内核驱动程序没有加载?我想它失败的原因有很多。也许一些OpenCV专家能给出更好的答案。但我敢打赌问题出在OpenCV的lib端。
对同一错误消息的一些初始搜索产生的结果具有相同的原因[1,2]。因此,如果在文件系统中找不到
/dev/raw1394
,请尝试这些方法。更新:
这似乎只是一个警告。模块raw1394似乎已被弃用,某些libdc1394版本可能正在查找它,但它随着更新而消失。搜索它会得到很多结果和错误报告。但看起来软件应该运行良好。所以如果你真的不需要它,你可以忽略它。[3,4]
令人沮丧的是,没有人真正拿出具体的解决方案。在安装OpenCV之后我遇到了这个问题。对我来说,删除此警告的最简单解决方案实际上是禁用此驱动程序:
好吧。我花了一整天的时间。
基本上,
/dev/raw1394
和/dev/null
之间的联系不是永久的。您可以猛击VM,调用ln /dev/null /dev/raw1394
,但它只会持续到您重新启动容器。我要做的,看起来是最简单的,但不是最完美的方法,就是在容器启动期间放置链接。
我本想把它作为一种服务来运行,但对于一个简单的工作来说似乎太多了。
我最终开始工作的方式(不是很漂亮,但很有效)是通过改变Dockerfile的
CMD
:CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>
相关问题 更多 >
编程相关推荐