Python3.4错误 - 无法启用可执行堆栈作为共享对象需要:无效参数

时间:2016-08-25 03:03:06

标签: python windows python-3.x opencv windows-subsystem-for-linux

我一直在尝试在Windows上的Bash(适用于Linux的Windows子系统,wsl)环境中安装OpenCV并且它已经证明非常困难。

我想我已经非常接近,但在进入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包?我使用的是从latest source code(v.3.1)编译的Python v3.4和OpenCV。

4 个答案:

答案 0 :(得分:27)

我在此之后解决了这个问题:tatsuya-y.hatenablog.com

我使用windows bash并按conda install -c menpo opencv3=3.1.0安装opencv 然后我得到了这个(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_*

答案 1 :(得分:2)

目前有很多东西根本不起作用,因为有未实现的系统调用(WSL只有部分覆盖,只有大约70%的系统调用被实现,其中一些只是部分调用),或者缺少套接字模式和选项(WSL尚不支持Unix数据报套接字,尽管它应该在下一个内部构建中可用)。

如果你去github(BashOnWindows)并发布一个strace或搜索你的问题并找到它的副本,这是获得答案的最佳方式。致力于此项目的Microsoft团队需要大量的反馈和错误测试。

要说清楚,我说你100%遇到了尚未实施的事情。但是,如果您查看.so文件的源代码以禁用使用该系统调用的代码部分,可能会有一种方法(因为Python是跨平台的,并非所有* nix操作系统都支持所有Linux系统调用)。

答案 2 :(得分:1)

我也遇到了同样的问题,但我只需重新安装即可修复它

$ sudo apt-get install execstack

和Windows 10中提到的评论构建14393.479

答案 3 :(得分:-1)

您可以使用execstack来安装opencv甚至导入lib。然而,对于视频捕获,如在cv2.VideoCapture(0)中,bash for windows不会起作用。您需要安装完整的发行版。