Error de Python3.4: no se puede habilitar la stack ejecutable ya que un objeto compartido requiere: Argumento no válido

He estado intentando instalar OpenCV en un entorno Bash en Windows (Windows Subsystem for Linux, wsl) y ha sido muy difícil.

Creo que me estoy acercando mucho, pero al ingresar a python, import cv2 el siguiente error:

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

¿Cómo habilito la ejecución de la biblioteca en la stack?


Los archivos de mi biblioteca OpenCV *opencv*.so* se encuentran en /usr/local/lib/ . En un entorno Linux normal, otorgaría a estas bibliotecas la capacidad de ejecutarse en la stack usando

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

Sin embargo, aunque puedo descargar con éxito el paquete execstack , no es un comando reconocido que pueda ejecutar para permitir la ejecución en la stack. Sospecho que esto tiene algo que ver con la Prevención de Ejecución de Datos, la versión de Exec-Shield de Windows para evitar ataques de astackmiento.

    Pero tal vez he estado demasiado cerca del problema para descubrir qué está mal. ¿Por qué no puedo importar este paquete de python? Estoy usando Python v3.4 y OpenCV comstackdo desde el último código fuente (v.3.1).

    Resolví este problema siguiendo esto: tatsuya-y.hatenablog.com

    Uso windows bash e instalo opencv by conda install -c menpo opencv3=3.1.0 luego obtuve esto (python 2.7) >>>import cv2 Traceback (most recent call last): File "", line 1, in ImportError: libopencv_ccalib.so.3.1: cannot enable executable stack as shared object requires: Invalid argument

    Lo execstack mediante comando execstack

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

    Entonces sudo apt-get install gtk2.0-0 Problema resuelto! >>> cv2.__version__ '3.1.0'

    Recuerde que las bibliotecas opencv se instalan en / usr / local / lib si siguen las instrucciones de instalación en línea. Así, el comando sería:

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

    Hay muchas cosas que simplemente no funcionan en este momento, ya sea que hay syscalls no implementadas (WSL solo tiene cobertura parcial, solo se implementa alrededor del 70% de las syscalls, algunas de ellas solo parcialmente), o faltan modos y opciones de socket (WSL aún no admite sockets de datagtwigs Unix, aunque debería estar disponible en la siguiente comstackción de información privilegiada).

    Si vas al github (BashOnWindows) y publicas una huelga o buscas tu problema y encuentras una copia, esa es la mejor manera de obtener una respuesta. El equipo de Microsoft que está trabajando en este proyecto quiere muchos comentarios y pruebas.

    Para ser claros, estoy diciendo que estás ejecutando al 100% algo que aún no está implementado. Sin embargo, podría haber una manera, si observa el código fuente de su archivo .so para deshabilitar la parte del código que usa ese syscall (ya que Python es una plataforma cruzada y no todos los syscalls de Linux son compatibles con todos los sistemas operativos * nix).

    También tuve el mismo problema, pero pude solucionarlo simplemente reinstalándolo

    $ sudo apt-get install execstack

    y el comentario mencionado anteriormente en Windows 10 build 14393.479

    Puede usar execstack para instalar opencv e incluso importar la biblioteca. Sin embargo, para hacer captura de video, como en cv2.VideoCapture (0), bash para Windows no funcionará. Necesitas tener una distribución completa instalada.