ошибка 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

что происходит?

6 65

6 ответов:

очень неприятно, что никто на самом деле не показывает конкретное решение. У меня была эта проблема после установки OpenCV. Для меня самым простым решением для удаления этого предупреждения было фактически отключить этот драйвер:

sudo ln /dev/null /dev/raw1394

libdc1394 библиотека для управления камерой. Я предполагаю, что это происходит с opencv, который вы связываете. Может быть, драйвер ядра не загружается ? Я думаю, есть ряд причин, почему он может потерпеть неудачу.

может быть, какой-то эксперт OpenCV может ответить лучше. Но я уверен, что проблема на стороне OpenCV lib.

некоторые начальные поиски одного и того же сообщения об ошибке дали результаты по той же причине [1,2]. Так что если вы не можете найти /dev/raw1394 в вашей файловой системе попробовать это.

обновление:

похоже, это только предупреждение. модуль raw1394 кажется устаревшим, и некоторые версии libdc1394 могут искать его, пока он исчез с обновлением. Поиск его дает много результатов и сообщений об ошибках. Но кажется, что программное обеспечение должно работать нормально. Так что если вам это действительно не нужно, вы можете просто игнорировать его. [3,4]

ОК. Я потратил на это целый день.

в основном, связь между /dev/raw1394 и /dev/null не является постоянным. Вы можете врезаться в свою виртуальную машину, позвоните ln /dev/null /dev/raw1394, но это будет длиться только до тех пор, пока вы не Запустите свой контейнер.

то, что я должен был сделать, казалось бы, самый простой, но не идеальный подход, это разместить ссылку во время запуска контейнера.

Я думал, что запустил его как сервис, но казалось слишком много для простого работа.

то, как я, наконец, пришел на работу, (это не красиво, но работает), путем изменения CMD из Dockerfile:

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.... и вуаля! все работает отлично!

спасибо Горану!

для людей, которые скомпилировали свой собственный opencv и столкнулись с этой ошибкой, и не нуждаются в поддержке firewire video capture, вы всегда можете повторно скомпилировать с помощью -D WITH_1394=OFF параметр, как показано ниже:

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

Если вы отключите эту опцию, вы даже можете потерять зависимость libdc1394-22-dev (ubuntu). Хотя я лично не проверял это.

еще одним обходным путем в использовании образа docker является монтирование Тома

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