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 darwingcc-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-798和MESOS-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