编程语言
首页 > 编程语言> > Mesos示例Test.PythonFramework检查在OSX上失败

Mesos示例Test.PythonFramework检查在OSX上失败

作者:互联网

成功编译Mesos 0.16.0之后,在检查PythonFramework时运行测试将失败.所有其他测试均成功通过.

我用于构建的步骤:

./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 (Mavericks)

Python 2.7.5 (default, Aug 25 2013, 00:04:04) [GCC 4.2.1 Compatible
Apple LLVM 5.0 (clang-500.0.68)] on darwin

gcc-4.7 (GCC) 4.7.3 Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There
is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

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

解决方法:

更新:

由于该版本可以完全处理clang编译,所以我以前的回答在Mesos 0.17.0中已经过时了(是!).因此,不再需要使用gcc进行编译-只需继续使用Xcode的clang(Xcode命令行实用程序)即可.

万一您仍然无法使Python绑定正常工作,请在此处在StackOverflow上添加评论或新问题,或发布到Mesos Mailing列表中.

Mesos版本0.16.0或更低:

如何在OS X(10.9)上修复Mesos的Python绑定.

通过自制软件安装Python 2.7.3

找出可用的版本

酿造版本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安装python

确保您不要强行安装通用版本(32 64位),因为这将再次导致以下相同的问题.默认仅是64位,这很好.

与自定义Python安装相关的重建Mesos

rm -rf构建

rm -rf〜/ .python-鸡蛋

mkdir构建

光盘制作

../configure CXX = g -4.7 CC = gcc-4.7 PYTHON = /usr/local/bin / python

使

做支票

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

[ RUN ] ExamplesTest.PythonFramework

[ OK ] ExamplesTest.PythonFramework (1682 ms)

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

使用语音输出设置手动执行该测试有助于确定确切的问题.

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

Traceback (most recent call last): File
“/Users/till/Documents/Development/github/mesos-master/build/../src/examples/python/test_framework.py”,
line 23, in
import mesos File “build/bdist.macosx-10.9-intel/egg/mesos.py”, line 26, in File
“build/bdist.macosx-10.9-intel/egg/_mesos.py”, line 7, in
File “build/bdist.macosx-10.9-intel/egg/_mesos.py”, line 6, in
bootstrap ImportError: dlopen(/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so,
2): Symbol not found: __ZNSoD0Ev Referenced from:
/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so
Expected in: flat namespace in
/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so

重要的细节是该原生Python egg的动态链接失败的事实.

在构建mesos 0.16时,可以在该模块的distutils构建步骤中找到其理由. Python distutils直接从python-config派生其构建设置.由于您的Python是使用clang构建的,因此distutils也会尝试使用clang构建本机鸡蛋.

问题:

> Mesos的autoconf阶段没有将编译器设置传播到distutils构建阶段.因此,即使在以上描述中Mesos本身是使用gcc-4.7构建的,卵还是使用clang构建的.结果是与ABI不兼容的libc和stdlibc混搭在一起.

>该部分现在已修复,Mesos将在distutils构建阶段使用相同的编译器(请参见MESOS-798MESOS-799).当您阅读此答案时,很有可能已经解决了该特定问题.

>默认的OS X Python distutils确实使用仅clang的gcc-frontend支持的参数来强制构建通用二进制文件(i386 x86_64).似乎没有解决方法,因此必须同时为这两种体系结构构建该egg的所有动态链接的依存关系(这似乎是OS X 10.6的遗留物).
> Mesos本身是静态链接到该鸡蛋的,因此不必将其构建为该鸡蛋在64位平台上构建和运行的通用二进制文件.但是,它将无法在32位平台上执行.
>只要Mesos不支持clang编译(因此与libc链接),唯一正确的解决方法似乎是安装不同编译的Python.一个快速简便的解决方案是使用自制软件安装Python 2.7.3.注意:请勿安装Python 2.7.6(homebrew的当前默认值),因为它与其autoconf开发人员宏有关存在问题(请参见MESOS-617)

标签:mesos,gcc,osx-mavericks,python,macos
来源: https://codeday.me/bug/20191122/2058916.html