python で opencv を利用しようとして、import cv2
を実行したら以下のようなエラーが表示されます。
$ python >>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: dlopen(/Library/Python/2.7/site-packages/cv2.so, 2): Symbol not found: __ZL11pyopencv_toIN2cv3VecIfLi2EEEEbP7_objectRT_PKc Referenced from: /Library/Python/2.7/site-packages/cv2.so Expected in: flat namespace in /Library/Python/2.7/site-packages/cv2.so
原因
原因は opencv の python モジュールライブラリ cv2.so
が他のサブライブラリを参照していて、その参照先のサブライブラリファイルが見つからないためです。(または見つかっているが読み込み権限がない、ファイル自体が破損しているなど)
サブライブラリのパスは RPATH
で指定していますが、何らかの原因でその整合性が取れなくなった可能性が高いです。
解決策
この場合 cv2.so
をもう一度ビルドする、ビルドする際に他のサブライブラリを参照しないように、CMake の「BUILD_SHARED_LIBS
」フラグを OFF にすると問題が解消できます。
opencv のソースコードから cv2.so
をビルドできます。詳しくは以下の2つの文書をご参照ください。