Я использую macOS, и недавно я столкнулся с этим TypeError
! Это, вероятно, вызвано связыванием встроенного файла .so
с файлом lib/libpython2.7.dylib
другого интерпретатора Python.
1. Сначала извлеките файл .so
с помощью команды otool -L
:
$ otool -L libh264decoder.so
libh264decoder.so:
/somepath/build/libh264decoder.so (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/ffmpeg/lib/libavcodec.58.dylib (compatibility version 58.0.0, current version 58.35.100)
/usr/local/opt/ffmpeg/lib/libswscale.5.dylib (compatibility version 5.0.0, current version 5.3.100)
/usr/local/opt/ffmpeg/lib/libavutil.56.dylib (compatibility version 56.0.0, current version 56.22.100)
/usr/local/opt/boost-python/lib/libboost_python27-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
Обратите внимание, что этот .so
файл связан с Python, установленным MacPort, который находится по адресу: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python
2. Но интерпретатор Python, который я использую , отличается.
Он расположен по адресу: /Users/name/anaconda3/envs/py27/
(который, очевидно, установлен Anaconda).
3. Таким образом, решение состоит в том, чтобы cmake
связать нужную библиотеку Python, установив DPYTHON_LIBRARY
varible:
$ cd build/
$ cmake -DPYTHON_LIBRARY="/Users/name/anaconda3/envs/py27/lib/libpython2.7.dylib" ..
$ make
4. Наконец, проверьте результат:
$ otool -L libh264decoder.so
libh264decoder.so:
/somepath/build/libh264decoder.so (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/ffmpeg/lib/libavcodec.58.dylib (compatibility version 58.0.0, current version 58.35.100)
/usr/local/opt/ffmpeg/lib/libswscale.5.dylib (compatibility version 5.0.0, current version 5.3.100)
/usr/local/opt/ffmpeg/lib/libavutil.56.dylib (compatibility version 56.0.0, current version 56.22.100)
/usr/local/opt/boost-python/lib/libboost_python27-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
Обратите внимание, что путь ссылки libpython2.7.dylib
изменен.