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

我一直在尝试在Windows(Windows Subsystem for Linux,wsl)环境中安装OpenCV ,这已经certificate是非常困难的。

我想我变得非常接近,但进入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包? 我正在使用从最新的源代码 (v.3.1)编译的Python v3.4和OpenCV。

有很多事情现在根本不起作用,因为系统调用没有实现(WSL只有部分覆盖,只有大约70%的系统调用被实现,其中一些只是部分调用),或者丢失了套接字模式和选项(WSL还不支持Unix数据报套接字,虽然它应该在下一个内部版本中可用)。

如果你去github(BashOnWindows)并发布strace或者搜索你的问题并找到它的一个副本,这是得到答案的最好方法。 从事这个项目的微软团队需要大量的反馈和bug测试。

要说清楚的是,我说的是,你100%都跑进了一些尚未实现的东西。 但是,如果您查看.so文件的源代码以禁用使用该系统调用的代码的一部分(因为Python是跨平台的,而不是所有Linux系统调用在所有* nix操作系统中都受支持),则可能有办法。

我解决了这个问题: tatsuya-y.hatenablog.com

我使用Windows bash并通过conda install -c menpo opencv3=3.1.0安装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_* 

我也有同样的问题,但我可以通过重新安装它来解决它

$ sudo apt-get install execstack

和上面提到的Windows 10 build 14393.479中的注释