Skip to main content

import cv2 で Symbol not found: xxxxx エラーが発生

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つの文書をご参照ください。

Jingwood

北海道の田舎で暮らしているプログラマーです。最近山登りにハマりました。

Leave a Reply

Your email address will not be published. Required fields are marked *