69

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

这是怎么回事?

4

7 回答 7

186

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

sudo ln /dev/null /dev/raw1394
于 2014-09-25T00:24:59.503 回答
31

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

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

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

更新:

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

于 2012-10-02T11:23:53.900 回答
9

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

基本上,和之间的联系/dev/raw1394不是/dev/null永久的。你可以 bash 进入你的虚拟机, call ln /dev/null /dev/raw1394,但它只会持续到你重新启动你的容器。

我必须做的,这似乎是最简单但不是完美的方法,就是在容器启动期间放置链接。

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

我最终开始工作的方式(它不漂亮,但有效)是通过更改CMDDockerfile 的:

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

于 2015-08-02T06:47:17.563 回答
6

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

libdc1394 error: Failed to initialize libdc1394

我终于看到goran对上一个答案的评论

所以我在virtualbox中启用了USB控制器......等等!一切正常!

谢谢戈兰!

于 2014-09-17T20:38:31.533 回答
4

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

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

如果您关闭此选项,您甚至可以失去 libdc1394-22-dev 依赖项 (ubuntu)。虽然我没有亲自测试过。

于 2016-09-17T01:19:21.657 回答
3

使用 docker 映像的另一个解决方法是挂载卷

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

于 2016-11-14T06:50:16.470 回答
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:~# 
于 2020-11-05T13:34:04.417 回答