python c++ shared-libraries ctypes libdc1394

python - error ctypes: error libdc1394: no se pudo inicializar libdc1394



c++ shared-libraries (6)

Bueno. Pasé un día entero en eso.

Básicamente, el enlace entre /dev/raw1394 y /dev/null no es permanente. Puede golpear en su máquina virtual, llame a ln /dev/null /dev/raw1394 , pero durará solo hasta que ln /dev/null /dev/raw1394 su contenedor.

Lo que tenía que hacer, que parecía ser el enfoque más simple, pero no el perfecto, es colocar el enlace durante el inicio del contenedor.

Pensé en Correrlo como un servicio, pero parecía demasiado para un trabajo simple.

La forma en que finalmente vine a trabajar, (no es bonita, pero funciona), es cambiando el CMD del archivo Dockerfile:

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

Estoy intentando compilar mi programa en una biblioteca compartida que puedo usar desde el código de Python usando ctypes.

La biblioteca compila bien usando este comando:

g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config --libs --cflags opencv`

Sin embargo, cuando intento importarlo usando ctypes

from ctypes import * mylib = CDLL("/path/to/mylib.so") print mylib.test() // Expected output: Hello World

Obtuve el siguiente error:

libdc1394 error: Failed to initialize libdc1394

¿Que esta pasando?


Muy frustrante que nadie realmente muestra una solución concreta. Tuve este problema después de instalar OpenCV. Para mí, la solución más sencilla para eliminar esta advertencia era desactivar este controlador:

sudo ln /dev/null /dev/raw1394


Otra solución para usar una imagen de acoplador es montar un volumen

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


Para las personas que compilaron su propio opencv y se encontraron con este error, y no necesitan el soporte de captura de video firewire, siempre pueden volver a compilar con la -D WITH_1394=OFF , como se muestra a continuación:

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

Si desactiva esta opción, puede perder la dependencia libdc1394-22-dev (ubuntu). Aunque no he probado esto personalmente.


Tuve un problema similar con una ejecución precisa de Ubuntu en VirtualBox. Primero instalé OpenCV siguiendo estas instrucciones: https://help.ubuntu.com/community/OpenCV Esto solucionó varios problemas que tenía tratando otros métodos, pero el problema con libdc1394 todavía estaba allí.

libdc1394 error: Failed to initialize libdc1394

Finalmente vi el comentario de goran en la share

Así que habilité el controlador USB en virtualbox .... et voila! ¡Todo funciona a la perfección!

Gracias, goran!


libdc1394 es una biblioteca para controlar el hardware de la cámara. Supongo que viene el código abierto con el que enlazas. ¿Quizás el controlador del kernel no se carga? Supongo que hay una serie de razones por las que puede fallar.

Quizás algún experto de OpenCV pueda responder mejor. Pero apuesto a que el problema está en el lado de lib de OpenCV.

Algunas búsquedas iniciales del mismo mensaje de error arrojaron resultados con la misma razón [ 1 , 2 ]. Entonces, si no puede encontrar /dev/raw1394 en su sistema de archivos, intente con ellos.

ACTUALIZAR:

Parece que esto es solo una advertencia. El módulo raw1394 parece estar en desuso y alguna versión de libdc1394 podría estar buscándolo mientras desaparecía con una actualización. La búsqueda da muchos resultados e informes de errores. Pero parece que el software debería funcionar bien. Entonces, si realmente no lo necesitas, simplemente puedes ignorarlo. [ 3 , 4 ]