Mesos ExamplesTest.python框架检查在OSX上失败

Mesos ExamplesTest.python框架检查在OSX上失败,python,macos,gcc,osx-mavericks,mesos,Python,Macos,Gcc,Osx Mavericks,Mesos,成功编译Mesos 0.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: Failur

成功编译Mesos 0.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)
[...]

环境:

OSX10.9.1(小牛)

Python 2.7.5(默认值,2013年8月25日,00:04:04)[GCC 4.2.1兼容 达尔文上的苹果LLVM 5.0(叮当-500.0.68)]

GCC-4.7(GCC)4.7.3版权(C)2012免费软件基金会。 这是自由软件;有关复制条件,请参见源。那里 没有担保;甚至不是为了适销性或是否适合 特殊目的



如何在此环境中构建通过测试的正确Mesos Python绑定?更新:

我以前的答案在Mesos 0.17.0中大部分已经过时,因为这个版本完全可以处理铿锵编译(耶!)。因此,不再需要使用gcc来编译它——只需继续使用Xcode的clang(Xcode命令行实用程序)

如果您仍然无法让Python绑定正常工作,请在StackOverflow或Mesos邮件列表中添加评论或新问题


Mesos版本0.16.0或更低版本:

如何修复OSX(10.9)上Mesos的Python绑定

通过自制软件安装Python 2.7.3

找出可用的版本

brew版本python

2.7.6 git签出3c86d2b/usr/local/Library/Formula/python.rb

2.7.5 git签出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

[……]

选择Python2.7.3

cd/usr/local/Library/Formula/

git checkout 865f763/usr/local/Library/Formula/python.rb

brew安装python

确保不要强制安装通用版本(32+64位),因为这将再次导致下面解释的相同问题。默认值仅为64位,这很好


结合自定义Python安装重建Mesos

rm-rf构建

rm-rf~/.python鸡蛋

mkdir构建

cd构建

。/configure CXX=g++-4.7 CC=gcc-4.7 PYTHON=/usr/local/bin/PYTHON

make

进行检查


现在,您应该看到一个功能正常的测试,这是一个完美的Mesos Python绑定:

[运行]示例st.python框架

[确定]示例ST.python框架(1682 ms)


由于要求用户安装自定义Python版本通常是错误的,但在这种情况下似乎是不可避免的,让我起草一份问题的解释。也许其中一位读者知道更好的解决方法

使用详细输出设置手动执行该测试确实有助于确定确切的问题

bin/mesos-tests.sh--gtest_filter=“*.pythonframew”--verbose

回溯(最近一次调用上次):文件 “/Users/till/Documents/Development/github/mesos master/build/。/src/examples/python/test_framework.py”, 第23行,在 导入mesos文件“build/bdist.macosx-10.9-intel/egg/mesos.py”,第26行,在文件中 “build/bdist.macosx-10.9-intel/egg/_mesos.py”,第7行,in
文件“build/bdist.macosx-10.9-intel/egg/_mesos.py”,第6行,在 bootstrapimportorror:dlopen(/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp//u mesos.so, 2) :未找到符号:\ 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鸡蛋的动态链接失败了

构建mesos 0.16时,可在本模块的
distutils
构建步骤中找到推理。Python
distutils
直接从
Python config
派生其构建设置。由于Python是使用
clang
构建的,因此
distutils
也将尝试使用
clang
构建您的原生egg

问题:

  • Mesos的autoconf阶段没有将编译器设置传播到
    distutils
    build阶段。因此,尽管Mesos本身是使用上述描述中的gcc-4.7构建的,但egg是使用clang构建的。结果是libc++和stdlibc++混搭在一起,它们不兼容ABI。
    • 该部分正在修复中,Mesos也将在
      distutils
      构建阶段使用相同的编译器(请参阅和)。当你读到这个答案时,很有可能这个问题已经被解决了
  • 默认的OS X Python
    distutils
    使用只有clang的gcc前端支持的参数强制构建通用二进制文件(i386+x86_64)。似乎没有解决办法,因此该egg的所有动态链接依赖项也必须为这两种体系结构构建(这似乎是OSX10.6的遗留问题)
  • Mesos本身是静态链接到该egg的,因此它不必作为通用二进制文件构建,以便egg在64位平台上构建和运行。但是,它将无法在32位平台上执行
  • 只要Mesos不支持clang编译(因此链接到libc++),唯一合适的解决方法似乎就是安装不同编译的Python。一个简单快捷的解决方案是使用
    自制
    安装Python 2.7。