私はWindows(Windows Subsystem for Linux、wsl)環境のBashに 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
パッケージを正常にダウンロードできたとしても、スタックでの実行を許可するために実行できる認識されたコマンドではありません。これは、スタックスマッシング攻撃を防ぐためのWindowsバージョンのExec-Shieldであるデータ実行防止と関係があると思われます。
しかし、多分私は問題に近すぎて何が悪いのか理解できませんでした。このpythonパッケージをインポートできないのはなぜですか?Python v3.4と 最新のソースコード からコンパイルされたOpenCVを使用しています=(v.3.1)。
私はこれに従ってこの問題を解決しました: tatsuya-y.hatenablog.com
私はwindowsbashを使用し、_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
commandで解決します
_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_*
_
実装されていないsyscall(WSLには部分的なカバレッジしかなく、syscallの約70%しか実装されておらず、一部は部分的にしか実装されていない)、またはソケットモードとオプションがないため、現時点では機能しないことがたくさんあります。 (WSLはまだUnixデータグラムソケットをサポートしていませんが、次のインサイダービルドで利用可能になるはずです)。
Github(BashOnWindows)にアクセスして、straceを投稿するか、問題を検索してそのコピーを見つけた場合、それが答えを得る最良の方法です。このプロジェクトに取り組んでいるMicrosoftチームは、たくさんのフィードバックとバグテストを望んでいます。
明確にするために、私はあなたがまだ実装されていない何かに100%遭遇していると言っています。ただし、.soファイルのソースコードを調べて、そのシステムコールを使用するコードの一部を無効にする方法があるかもしれません(Pythonはクロスプラットフォームであり、すべてのLinuxシステムコールがクロスプラットフォームであるとは限らないため)すべての* nixオペレーティングシステムでサポートされています)。
私も同じ問題を抱えていましたが、再インストールするだけで修正できました
$ Sudo apt-get install execstack
およびWindows10ビルド14393.479での上記のコメント