2013-12-22 29 views
3

未能成功編譯Mesos 0.16.0,檢查PythonFramework當運行測試失敗之後。所有其他測試都通過成功。Mesos ExamplesTest.PythonFramework支票OSX


我的步驟用於建築:

./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綁定環境?

回答

3

更新:

我以前的答案大多是由於這樣的事實,這個版本沒有完全處理鐺compilage變得過時作爲Mesos 0.17.0或更新的(耶!)。因此,沒有必要使用gcc再編譯它 - 只要繼續使用Xcode的鐺(Xcode中的命令行實用工具)。

如果你仍然陷入麻煩的Python綁定工作,請在這裏發表評論或新問題在計算器上或張貼到Mesos郵件列表。


Mesos 0.16.0或更低版本:

如何解決Mesos在OS X(10.9)的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位,這就好了。


重建在連接Mesos與您的自定義Python安裝

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綁定:

[ RUN ] ExamplesTest.PythonFramework

[ OK ] ExamplesTest.PythonFramework (1682 ms)


當要求用戶安裝一個自定義的Python版本通常是錯誤的,但在這種情況下似乎是不可避免的,讓我起草一個問題的解釋。也許其中一位讀者知道更好的解決方法。

使用verbosive輸出設置手動執行該測試有助於確定確切的問題。

​​

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本地雞蛋的動態鏈接失敗的事實。

當建立0.16時,推理可在distutils構建步驟中找到。 Python distutils直接從派生它們的構建設置。由於您的Python是使用clang構建的,因此distutils也會嘗試使用clang來構建您的本地蛋。

問題:

  • Mesos' autoconf的階段並沒有傳播編譯器設置成distutils構建階段。因此,即使Mesos本身是在上面的描述中使用gcc-4.7構建的,但是蛋是使用clang構建的。結果是libC++和stdlibC++不兼容ABI。
    • 該部分現在正在修復,Mesos將在distutils構建階段也使用相同的編譯器(請參閱MESOS-798MESOS-799)。當你讀到這個答案時,機會非常高,這個問題已經得到了解決。
  • 默認OS X的Python distutils不執行構建使用僅鐺的GCC-前端支持參數通用二進制代碼(I386 + x86_64的)。似乎沒有解決方法,因此所有動態鏈接的依賴關係都必須爲兩種體系結構構建(這似乎是OS X 10.6剩餘的)。
  • Mesos本身被靜態鏈接到那個蛋中,因此它不必被構建爲一個通用的二進制文件,以便在64位平臺上構建和運行。但是它將無法在32位平臺上執行。
  • 只要Mesos不支持clang compilage(因此與libC++鏈接),唯一適當的解決方法似乎是安裝一個不同編譯的Python。一個快速而簡單的解決方案是使用homebrew來安裝Python 2.7.3。 注意:不安裝Python 2.7.6(自制的當前默認)作爲一個在其開發的autoconf宏連接有問題(見MESOS-617