Ошибка 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.
Некоторый первоначальный поиск того же самого сообщения об ошибке дал результаты по той же причине [ 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
Я наконец увидел комментарий goran к предыдущему ответу
Так что я включил контроллер USB в virtualbox.... и вуаля! все работает отлично!
Спасибо, Горан!
Для тех, кто скомпилировал свой opencv и столкнулся с этой ошибкой и не нуждается в поддержке видеозахвата firewire, вы всегда можете перекомпилировать -D WITH_1394=OFF
вариант, как показано ниже:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=OFF ./
Если вы отключите эту опцию, вы даже можете потерять зависимость libdc1394-22-dev (ubuntu). Хотя я лично не проверял это.
Другой обходной путь в использовании образа докера - монтирование тома.
docker run -v /dev/null:/dev/raw1394
У меня такая же проблема. решается запуском сначала 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:~#