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

我试图编译我的程序到一个共享库,我可以在Python代码中使用ctypes。

库使用这个命令编译好:

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 

这是怎么回事?

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

 sudo ln /dev/null /dev/raw1394 

libdc1394是一个控制相机硬件的库。 我认为这是你连接的opencv。也许内核驱动程序不加载? 我想有很多原因可以导致失败。

也许一些OpenCV专家可以更好地回答。 但我敢打赌,问题出在OpenCV库的一面。

一些初始search相同的错误信息产生了相同的原因的结果[ 1,2 ]。 所以,如果你在你的文件系统上找不到/dev/raw1394 ,请尝试一下。

更新:

看来这只是一个警告。 模块raw1394似乎已被弃用,而一些libdc1394版本可能正在寻找它,而它随着更新而消失。 search它会产生许多结果和错误报告。 但似乎软件应该运行良好。 所以,如果你不需要它,你可以忽略它。 [ 3,4 ]

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

基本上, /dev/raw1394/dev/null之间的链接不是永久的。 你可以ln /dev/null /dev/raw1394你的虚拟机,调用ln /dev/null /dev/raw1394 ,但是它只会持续到你重新启动你的容器。

我所要做的,似乎是最简单的,但不是完美的方法,是在Container的启动期间放置链接。

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

我终于来到工作的方式(这不是很好,但工作),是通过更改Dockerfile的CMD

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

我有一个Ubuntu的精确运行在VirtualBox下类似的问题。 首先,我按照以下说明安装了OpenCV: https ://help.ubuntu.com/community/OpenCV这个问题解决了我尝试使用其他方法的几个问题,但libdc1394的问题仍然存在。

 libdc1394 error: Failed to initialize libdc1394 

我终于在前面的回答中看到戈兰评论

所以我启用了USB控制器在virtualbox …. et瞧! 一切正常完美!

谢谢goran!

对于编译自己的opencv并遇到这个错误,并且不需要FireWirevideo捕获支持的人,可以随时用-D WITH_1394=OFF选项重新编译,如下所示:

 cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=OFF ./ 

如果closures这个选项,你甚至可以放弃libdc1394-22-dev依赖(ubuntu)。 虽然我没有亲自testing过这个。

另一个使用docker镜像的解决方法是安装一个卷

docker run -v /dev/null:/dev/raw1394