在成功编译mesos0.16.0之后,在检查python框架时运行测试失败。所有其他测试都成功通过。
我建造的步骤:
./bootstrap
mkdir build
cd build
../configure CXX=g++4.7 CC=gcc-4.7
make
然后,在运行测试时;
make check
结果如下:
[...]
[ RUN ] ExamplesTest.PythonFramework
../../src/tests/script.cpp:78: Failure
Failed
python_framework_test.sh exited with status 1
[ FAILED ] ExamplesTest.PythonFramework (201 ms)
[...]
环境:
os x 10.9.1(小牛)
达尔文上的python 2.7.5(默认值,2013年8月25日,00:04:04)[gcc 4.2.1兼容apple llvm 5.0(clang-500.0.68)]
GCC-4.7(GCC)4.7.3版权(C)2012免费软件基金会,这是免费软件;有关复制条件,请参见源代码。无担保;甚至不是为了适销性或适合某一特定目的。
如何构建适当的mesos-python绑定以通过此环境中的测试?
1条答案
按热度按时间vnjpjtjt1#
更新:
我以前的答案在mesos0.17.0中已经过时了,因为这个版本确实可以完全处理铿锵编译(耶!)。因此,不再需要使用gcc来编译它了——只需继续使用xcode的clang(xcode命令行实用程序)。
如果您仍然无法让python绑定正常工作,请在stackoverflow上添加评论或新问题,或将其发布到mesos邮件列表中。
mesos版本0.16.0或更低版本:
如何修复osx(10.9)上mesos的python绑定。
通过自制安装python 2.7.3
找出可用的版本
brew versions python
2.7.6 git checkout 3c86d2b/usr/local/library/formula/python.rb2.7.5 git checkout a04b443/usr/local/library/formula/python.rb
2.7.3 git checkout 865f763/usr/local/library/formula/python.rb
2.7.4 git checkout 280581d/usr/local/library/formula/python.rb
[...]
选择python 2.7.3
cd /usr/local/Library/Formula/
git checkout 865f763 /usr/local/Library/Formula/python.rbbrew install python
请确保不要强制安装通用版本(32+64位),因为这会再次导致下面解释的相同问题。默认值仅为64位,这很好。结合自定义python安装重建mesos
rm -rf build
rm -rf ~/.python-eggsmkdir build
cd build../configure CXX=g++-4.7 CC=gcc-4.7 PYTHON=/usr/local/bin/python
makemake check
现在,您应该看到一个功能正常的测试,因此是一个非常好的mesos-python绑定:[运行]examplestest.pythonframew
[确定]示例ST.python框架(1682 ms)
由于要求用户安装定制的python版本通常是错误的,但在这种情况下似乎是不可避免的,让我起草一份关于这个问题的解释。也许其中一个读者知道更好的解决方法。
使用详细输出设置手动执行该测试确实有助于确定确切的问题。
bin/mesos-tests.sh --gtest_filter="*.PythonFramework" --verbose
回溯(最后一次调用):文件“/users/till/documents/development/github/mesos master/build/。/src/examples/python/test\u framework.py”,第23行,导入mesos文件“build/bdist.macosx-10.9-intel/egg/mesos.py”,第26行,文件“build/bdist.macosx-10.9-intel/egg/\u mesos.py”,第7行,in文件“build/bdist.macosx-10.9-intel/egg/\u mesos.py”,第6行,在bootstrap importerror:dlopen(/users/till/.python eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/\u mesos.so,2):未找到符号:\u znsod0ev引用自:/users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp//u mesos.so应在/users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp//u mesos.so的平面命名空间中
重要的细节是,本地python鸡蛋的动态链接失败了。
推理可以在
distutils
在构建mesos 0.16时本模块的构建步骤。Pythondistutils
直接从python-config
. 因为你的python是用clang
,的distutils
将尝试使用clang
也。问题:
mesos的autoconf阶段没有将编译器设置传播到
distutils
建造阶段。因此,尽管mesos本身是使用上面描述的gcc-4.7构建的,但是egg是使用clang构建的。结果是libc和stdlibc的混合,这两种语言不兼容abi。这一部分正在修复,mesos将使用相同的编译器
distutils
建造阶段(见mesos-798和mesos-799)。很有可能当你读到这个答案时,这个问题已经被解决了。默认的os x python
distutils
强制使用只有clang的gcc前端支持的参数构建通用二进制文件(i386+x8664)。似乎没有解决方法,因此该egg的所有动态链接依赖项也必须为这两种体系结构构建(这似乎是osx10.6的遗留问题)。mesos本身是静态链接到该egg的,因此它不必作为通用二进制文件构建,egg就可以在64位平台上构建和运行。但是,它将无法在32位平台上执行。
只要mesos不支持clang编译(因此被链接到libc++),唯一合适的解决方法似乎是安装一个不同编译的python。一个快速简单的解决方案是使用
homebrew
安装Python2.7.3。注意:不要安装Python2.7.6(当前的默认自制版本),因为它的autoconf developer宏有问题(见mesos-617)