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