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

Я пытался установить OpenCV в среде Bash в среде Windows (подсистема Windows для 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, версией Exec-Shield для Windows, предотвращающей атаки, разрушающие стек.

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


person pirt    schedule 25.08.2016    source источник
comment
В execstack: вам нужно запустить его от имени пользователя root, так как он находится внутри sbin. Однако это не помогает с проблемой OpenCV.   -  person Emiswelt    schedule 19.09.2016


Ответы (4)


Я решил эту проблему следующим образом: tatsuya-y.hatenablog.com

Я использую 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

Я решаю это с помощью execstackcommand

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_*
person QiuChen Meng    schedule 20.12.2016
comment
У меня отлично работало и на opencv 3.2 для C/C++. Помните, что библиотеки opencv устанавливаются в /usr/local/lib, если следовать онлайн-инструкциям по установке. - person Indeed; 05.01.2017
comment
@Indeed Ваш комментарий следует отредактировать в ответе, чтобы расширить решение для пользователей, которые устанавливают его через какой-либо другой пакет Python, кроме anaconda. - person ScheissSchiesser; 18.06.2017
comment
Спасибо за решение; для всех тех, кто пытается запустить его в определенной среде anaconda: ваши файлы lib могут находиться в вашей среде sudo execstack -c ~/anaconda3/envs/{ENVIRONMENT_NAME}/lib/libopencv_* - person lwohlhart; 17.01.2018

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

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

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

person Harry Gindi    schedule 30.08.2016
comment
У меня была точно такая же проблема, вы публикуете проблему на BashOnWindows? - person ramontiveros; 11.10.2016
comment
@ramontiveros Попробуйте найти проблему, но да, если вы не можете найти кого-то еще, говорящего об этом, попробуйте опубликовать сообщение на странице github с помощью strace. - person Harry Gindi; 12.10.2016

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

$ sudo apt-get install execstack

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

person cyrix    schedule 05.12.2016

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

person locopatadita24    schedule 20.02.2018