mesos examplestest.pythonframework检查在osx上失败

hgc7kmma  于 2021-06-21  发布在  Mesos
关注(0)|答案(1)|浏览(357)

在成功编译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绑定以通过此环境中的测试?

vnjpjtjt

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.rb
2.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.rb brew install python 请确保不要强制安装通用版本(32+64位),因为这会再次导致下面解释的相同问题。默认值仅为64位,这很好。
结合自定义python安装重建mesos rm -rf build rm -rf ~/.python-eggs mkdir build cd build ../configure CXX=g++-4.7 CC=gcc-4.7 PYTHON=/usr/local/bin/python make make 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时本模块的构建步骤。Python distutils 直接从 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)

相关问题