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


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

sudo ln /dev/null /dev/raw1394

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

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

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

обновление:

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


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

в основном, связь между /dev/raw1394 и /dev/null не является постоянным. Вы можете врезаться в свою виртуальную машину, call 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