web-dev-qa-db-ja.com

Python3.4エラー-共有オブジェクトに必要なため、実行可能スタックを有効にできません:無効な引数

私は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)。

9
pirt

私はこれに従ってこの問題を解決しました: 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

execstackcommandで解決します

_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_*
_
27
QiuChen Meng

実装されていないsyscall(WSLには部分的なカバレッジしかなく、syscallの約70%しか実装されておらず、一部は部分的にしか実装されていない)、またはソケットモードとオプションがないため、現時点では機能しないことがたくさんあります。 (WSLはまだUnixデータグラムソケットをサポートしていませんが、次のインサイダービルドで利用可能になるはずです)。

Github(BashOnWindows)にアクセスして、straceを投稿するか、問題を検索してそのコピーを見つけた場合、それが答えを得る最良の方法です。このプロジェクトに取り組んでいるMicrosoftチームは、たくさんのフィードバックとバグテストを望んでいます。

明確にするために、私はあなたがまだ実装されていない何かに100%遭遇していると言っています。ただし、.soファイルのソースコードを調べて、そのシステムコールを使用するコードの一部を無効にする方法があるかもしれません(Pythonはクロスプラットフォームであり、すべてのLinuxシステムコールがクロスプラットフォームであるとは限らないため)すべての* nixオペレーティングシステムでサポートされています)。

2
Harry Gindi

私も同じ問題を抱えていましたが、再インストールするだけで修正できました

$ Sudo apt-get install execstack

およびWindows10ビルド14393.479での上記のコメント

1
cyrix