我一直在尝试在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中的注释