ctypes错误:libdc1394错误:无法初始化libdc1394

2024-03-29 14:37:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图将我的程序编译成一个共享库,可以在使用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

怎么了?


Tags: to代码命令程序soctypesshared编译成
3条回答

libdc1394是一个用于控制相机硬件的库。我想是你链接的opencv。可能内核驱动程序没有加载?我想它失败的原因有很多。

也许一些OpenCV专家能给出更好的答案。但我敢打赌问题出在OpenCV的lib端。

对同一错误消息的一些初始搜索产生的结果具有相同的原因[12]。因此,如果在文件系统中找不到/dev/raw1394,请尝试这些方法。

更新:

这似乎只是一个警告。模块raw1394似乎已被弃用,某些libdc1394版本可能正在查找它,但它随着更新而消失。搜索它会得到很多结果和错误报告。但看起来软件应该运行良好。所以如果你真的不需要它,你可以忽略它。[34]

令人沮丧的是,没有人真正拿出具体的解决方案。在安装OpenCV之后我遇到了这个问题。对我来说,删除此警告的最简单解决方案实际上是禁用此驱动程序:

sudo ln /dev/null /dev/raw1394

好吧。我花了一整天的时间。

基本上,/dev/raw1394/dev/null之间的联系不是永久的。您可以猛击VM,调用ln /dev/null /dev/raw1394,但它只会持续到您重新启动容器。

我要做的,看起来是最简单的,但不是最完美的方法,就是在容器启动期间放置链接。

我本想把它作为一种服务来运行,但对于一个简单的工作来说似乎太多了。

我最终开始工作的方式(不是很漂亮,但很有效)是通过改变Dockerfile的CMD

CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>

相关问题 更多 >