首页 文章

关于OpenNI模块导入的Python分段错误11 - Homebrew boost和python的问题?

提问于
浏览
2

我在OSX 10.9上运行自制的python版本:Maverick .

Short version:

当我尝试将OpenNI模块导入python时,我遇到了 Python segmentation fault 11 . 我已经尝试重命名我的 readline.so 文件,如下面的链接所示,所以我假设这是一个不同的问题:

Python crashing when running two commands (Segmentation Fault: 11)

我想知道这可能是我的自制程序升级安装没有链接到正确版本的python的问题 . 虽然我似乎无法解决它,但很可能正在咆哮错误的树 .

Very long version:

我一直在尝试按照此站点的指示安装PyOpenNI python模块:http://www.justinfx.com/2012/06/21/getting-started-with-xbox-360-kinect-on-osx/

我没有手动安装OpenNI,NITE和该链接上指定的Sensor Kinect驱动程序,而是使用了我在此处找到的brew版本:https://github.com/totakke/homebrew-openni

在我到达最后一步,安装PyOpenNI之前,一切似乎都运行良好 . 我在创建make文件时遇到了CMake错误;它没有找到OpenNI库并包含目录 . 我手动将它们放在CMakeCache.txt文件中,然后安装似乎工作正常 .

一旦我尝试在python shell中导入openni模块,我得到:

Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6

谷歌搜索了一下,有人建议这是一个Boost错误,安装到Mac的Python版本而不是Homebrew版本 . Homebrew + Python on mac os x 10.8: Fatal Python error: PyThreadState_Get: no current thread importing mapnik

运行 otool -L $(brew list boost | grep 'python.*.dylib') 输出表明情况如此:

兴趣点:

/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.5)

全输出:

/usr/local/Cellar/boost/1.55.0/lib/libboost_python-mt.dylib:
/usr/local/lib/libboost_python-mt.dylib (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.5)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/local/Cellar/boost/1.55.0/lib/libboost_python.dylib:
/usr/local/lib/libboost_python.dylib (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.5)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

我卸载了boost并用 brew install boost --build-from-source 重新安装了它

有趣的是,安装后,它给出了这个警告:

The Boost bottle's module will not import into a Homebrew-installed Python.
If you use the Boost Python module then please:
  brew install boost --build-from-source

因为我刚刚那样做,这显然很有趣 . 再次运行 otool

兴趣点:

/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)

全输出:

/usr/local/Cellar/boost/1.55.0/lib/libboost_python-mt.dylib:
/usr/local/lib/libboost_python-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/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 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/local/Cellar/boost/1.55.0/lib/libboost_python.dylib:
/usr/local/lib/libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/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 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

所以现在它似乎指向一个不同的python框架目录,但似乎它仍然不是Homebrew python框架目录 .

我在这个评估中是否正确,提升仍然没有链接到自制的python版本?这会导致分段故障11,还是完全由其他原因造成的?

1 回答

  • 0

    我知道答案很晚,但对我来说可能对我有帮助 . 显然,这个解决方案由akakcolin发布,作为与Github上PyOpenNI相关的问题之一的答案 .

    • 重建自制Python:

    brew update 然后 brew doctor

    brew rm python

    brew install python --force --install-lib --install-headers --install-data --verbose

    • 符号链接:

    ln -s /usr/local/Cellar/python/2.7.x/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib /usr/local/lib/ (注意你正在使用的python版本)

    • cmake和make:

    cmake ../PyOpenNI 您可能需要指定 -D OPENNI_INCLUDE_DIR

    make

    这对我使用Python 2.7.10和boost(使用boost-python)1.58.0

相关问题