Вопрос по libdc1394, c++, shared-libraries, ctypes, python – ошибка ctypes: ошибка libdc1394: не удалось инициализировать libdc1394

66

Я пытаюсь скомпилировать мою программу в общую библиотеку, которую я могу использовать из кода 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   ответов
6

У меня была похожая проблема с точной работой Ubuntu под VirtualBox. Сначала я установил OpenCV, следуя этим инструкциям:https://help.ubuntu.com/community/OpenCV Это исправило несколько проблем, которые я пробовал другими способами, но проблема с libdc1394 все еще была.

libdc1394 error: Failed to initialize libdc1394

Я наконец увиделГоран прокомментироватьпредыдущий ответ

Так что я включил контроллер USB в virtualbox .... и вуаля! все работает р, неправильно!

Спасибо, Горан!

Я не был зарегистрирован при ответе на пост, теперь яЯ зарегистрирован, но не обладаю достаточной репутацией, чтобы переместить это сообщение в комментарии. jeremie
@jeremie Я использую Virtual Box, и на нем запущена Ubuntu 14.04, контроллер USB включен, но я получаю то же сообщение - ошибка libdc1394: Не удалось инициализировать libdc1394, я запускаю док-контейнер, в котором установлен openCV kkk
Это должен быть комментарий, а не дополнительный ответ. paisanco
4

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

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

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

180

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

sudo ln /dev/null /dev/raw1394
Та же проблема с использованием OpenAlpr с "ALPR» командная строка. Проблема ушла с помощью этого решения; в любом случае это не ясно, в этой теме, почему это происходит Diego Andrés Díaz Espinoza
Это решение неПохоже, что он постоянен в Debian. После перезагрузки ссылка пропала. Как сделать его постоянным? Christian
Круто, ты спас мне день! Dmytriy Voloshyn
выглядит как ошибка в OpenCV dashesy
3

Другой обходной путь в использовании образа докера - монтирование тома.

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

Как и почему это работает? Позволит ли это мне использовать веб-камеру? Rohit Shinde
29

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

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

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

ОБНОВИТЬ:

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

Исправление для/dev/raw1394 не похоже на работу, я получаюFATAL: Module raw1394 not found. отmodprobe fredley
Мы неНе нужно использовать аппаратное обеспечение камеры, есть ли способ компилирования без этой части OpenCV? fredley
Кажется, это всего лишь предупреждение ". Это, конечно, то, что я пропустил. Я просто предположил, что импорт неЭто сработало, но если я просто проигнорировал это и продолжил, все работало. Возможно, сделать эту часть вашего ответа жирным шрифтом? Arthur Tacca
Я видел эту проблему при работе под виртуальной машиной (VMWare Fusion Ubuntu 14.04 Django Stack из Bitnami), которая нене установлен USB-контроллер. После того, как я добавил USB-контроллер к виртуальной машине, эта ошибка исчезла. goran
8

Хорошо. Я провел целый день на этом.

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

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

Я думал, что в Запуске это как услуга, но слишком много для простой работы.

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

CMD sh -c 'ln -s /dev/null /dev/raw1394';

Кроме того, вы можете добавитьRUN echo 'ln /dev/null /dev/raw1394' >> ~/.bashrc и держите свой CMD нетронутым Paglian

Похожие вопросы