Ошибка Python3.4 - невозможно включить исполняемый стек, так как для общего объекта требуется: Неверный аргумент

Я пытался установить OpenCV в среде Bash on Windows (Windows Subsystem for Linux, wsl), и это оказалось очень трудным.

Я думаю, что я очень близко, но после входа в Python, import cv2 выдает следующую ошибку:

ImportError: libopencv_core.so.3.1: cannot enable executable stack as shared object requires: Invalid argument

Как включить библиотеку для выполнения в стеке?


Мой OpenCV *opencv*.so* файлы библиотеки расположены в /usr/local/lib/, В обычной среде Linux я бы дал этим библиотекам возможность выполнять в стеке, используя

execstack -c /usr/local/lib/*opencv*.so*

Тем не менее, хотя я могу успешно загрузить execstack пакет, это не распознанная команда, которую я могу запустить, чтобы разрешить выполнение в стеке. Я подозреваю, что это как-то связано с Data Execution Prevention, версией Window Exec-Shield для предотвращения атак с разбиванием стека.

Но, может быть, я просто был слишком близко к проблеме, чтобы понять, что не так. Почему я не могу импортировать этот пакет Python? Я использую Python v3.4 и OpenCV, скомпилированные из новейшего исходного кода (v.3.1).

4 ответа

Решение

Я решил эту проблему следующим образом: http://tatsuya-y.hatenablog.com/entry/2016/08/29/183331

Я использую Windows Bash и установить OpenCV conda install -c menpo opencv3=3.1.0тогда я получил это (Python 2.7)>>>import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: libopencv_ccalib.so.3.1: cannot enable executable stack as shared object requires: Invalid argument

Я решаю это execstackкоманда

sudo apt-get install execstack
sudo execstack -c $HOME/anaconda2/lib/libopencv_*

затем sudo apt-get install gtk2.0-0Задача решена! >>> cv2.__version__ '3.1.0'

Помните, что библиотеки opencv устанавливаются в / usr / local / lib, если вы выполняете инструкции по установке в Интернете. Таким образом, команда будет:

sudo execstack -c /usr/local/lib/libopencv_*

Есть много вещей, которые просто не работают в данный момент, потому что существуют либо невыполненные системные вызовы (WSL имеет только частичное покрытие, реализовано только около 70% системных вызовов, некоторые из них только частично), либо отсутствуют режимы и параметры сокетов. (WSL еще не поддерживает сокеты датаграмм Unix, хотя он должен быть доступен в следующей сборке инсайдеров).

Если вы зайдете на github (BashOnWindows) и опубликуете страйс или выполните поиск своей проблемы и найдете ее копию, это лучший способ получить ответ. Команда Microsoft, работающая над этим проектом, хочет получить множество отзывов и тестов ошибок.

Чтобы было ясно, я говорю, что вы на 100% сталкиваетесь с тем, что еще не реализовано. Однако может быть способ, если вы посмотрите на исходный код вашего файла.so, чтобы отключить часть кода, которая использует этот системный вызов (поскольку Python является кроссплатформенным и не все системные вызовы Linux поддерживаются во всех операционных системах *nix).

У меня тоже была такая же проблема, но я смог ее исправить, просто переустановив

$ sudo apt-get install execstack

и комментарий, упомянутый выше в сборке Windows 10 14393.479

Вы можете использовать execstack для установки opencv и даже импорта lib. Но для захвата видео, как в cv2.VideoCapture(0), bash для окон не будет работать. Вам нужно установить полный дистрибутив.

Другие вопросы по тегам