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

时间:2012-10-02 11:18:00

标签: python c++ shared-libraries ctypes libdc1394

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

发生了什么事?

7 个答案:

答案 0 :(得分:181)

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

sudo ln /dev/null /dev/raw1394

答案 1 :(得分:30)

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

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

初步搜索相同的错误消息会产生相同的结果[12]。因此,如果您在文件系统上找不到/dev/raw1394,请尝试这些。

更新

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

答案 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:~# 
相关问题