我正在尝试将我的程序编译为一个共享库,我可以使用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
发生了什么事?
答案 0 :(得分:181)
非常令人沮丧的是,没有人真正展示具体的解决方案。我在安装OpenCV后遇到了这个问题。对我来说,删除此警告的最简单方法实际上是禁用此驱动程序:
sudo ln /dev/null /dev/raw1394
答案 1 :(得分:30)
libdc1394
是用于控制相机硬件的库。我认为它是你链接的opencv。也许内核驱动程序没有加载?我想有很多原因导致它失败。
也许一些OpenCV专家可以更好地回答。但我敢打赌问题出在OpenCV lib端。
初步搜索相同的错误消息会产生相同的结果[1,2]。因此,如果您在文件系统上找不到/dev/raw1394
,请尝试这些。
看起来这只是一个警告。模块raw1394似乎已被弃用,而某些libdc1394版本可能正在寻找它,而它随着更新而消失。搜索它会提供许多结果和错误报告。但似乎软件运行良好。所以如果你真的不需要它,你可以忽略它。 [3,4]
答案 2 :(得分:8)
好。我花了整整一天时间。
基本上,/dev/raw1394
和/dev/null
之间的链接不是永久性的。你可以打入你的虚拟机,拨打ln /dev/null /dev/raw1394
,但它只会在你重新启动容器之前持续。
我必须做的,似乎是最简单但不完美的方法,是在Container启动期间放置链接。
我认为将它作为一项服务运行,但对于一项简单的工作似乎太过分了。
我最终开始工作的方式(它不漂亮,但有效),是通过更改Dockerfile的CMD
:
CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>
答案 3 :(得分:6)
我遇到类似的问题,在VirtualBox下运行Ubuntu精确。 首先,我按照以下说明安装了OpenCV:https://help.ubuntu.com/community/OpenCV 这解决了我尝试过其他方法的几个问题,但是libdc1394的问题仍然存在。
libdc1394 error: Failed to initialize libdc1394
我终于看到了对goran
的previous answer评论所以我在virtualbox中启用了USB控制器......等等!一切都很完美!
谢谢goran!
答案 4 :(得分:4)
对于编译自己的opencv并遇到此错误的人,并且不需要firewire视频捕获支持,您可以随时重新编译
-D WITH_1394=OFF
选项,如下所示:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=OFF ./
如果关闭此选项,您甚至可以松开libdc1394-22-dev依赖项(ubuntu)。虽然我没有亲自测试过这个。
答案 5 :(得分:3)
使用泊坞窗图像的另一个解决方法是装载卷
docker run -v /dev/null:/dev/raw1394
答案 6 :(得分:0)
我有同样的问题。 通过先运行tsu然后运行debian来解决。
问题:
./start-debian.sh
root@localhost:~# python3 -c "import cv2; print(cv2.__version__)"
libdc1394 error: Failed to create juju: opendir: Permission denied
libdc1394 error: Failed to initialize libdc1394
3.2.0
root@localhost:~#
tsu
./start-debian.sh
root@localhost:~# python3 -c "import cv2; print(cv2.__version__)"
3.2.0
root@localhost:~#