After linking a .so
with boost-python:
-L/usr/local/lib -lboost_serialization -lboost_python -lpython2.7 -O2
When I import it to a .py
file, I got
TypeError: __init__() should return None, not 'NoneType'
This is due to the mismatch of libpython in .so
and current interpreter:
$ otool -L model.so
model.so:
model.so (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.10)
Solution
Use -L
to inform the linker where the correct libpython is:
-L`python -c "import distutils.sysconfig as c; print(c.PREFIX)"`/lib -L/usr/local/lib -lboost_serialization -lboost_python -lpython2.7 -O2
References
- https://stackoverflow.com/questions/20437769/boost-python-init-should-return-none-not-nonetype
- https://github.com/Homebrew/legacy-homebrew/issues/10541#issuecomment-4229171