ошибка 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
не является постоянным. Вы можете врезаться в свою виртуальную машину, позвоните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). Хотя я лично не проверял это.