Jie Yu created MESOS-1745:
-----------------------------
Summary: Building Python egg on OS X using clang is problematic
Key: MESOS-1745
URL: https://issues.apache.org/jira/browse/MESOS-1745
Project: Mesos
Issue Type: Bug
Affects Versions: 0.19.1
Environment: Mac OS X 10.8.5
clang-3.3 installed via brew
python 2.7.8 install via brew ([GCC 4.2.1 Compatible Apple LLVM 4.2
(clang-425.0.28)])
Reporter: Jie Yu
Here is what I have observed, correct me if I am wrong.
To reproduce:
{noformat}
$ tar zxvf mesos-0.19.1.tar.gz
$ cd mesos-0.19.1
$ mkdir build
$ cd build
$ CC=clang-3.3 CXX=clang++-3.3 ../configure
$ make
$ PYTHONPATH=src/python/dist/mesos-0.19.1-py2.7-macosx-10.8-x86_64.egg python
Python 2.7.8 (default, Aug 18 2014, 15:46:02)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mesos
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.8-x86_64/egg/mesos.py", line 26, in <module>
File "build/bdist.macosx-10.8-x86_64/egg/_mesos.py", line 7, in <module>
File "build/bdist.macosx-10.8-x86_64/egg/_mesos.py", line 6, in __bootstrap__
ImportError:
dlopen(/Users/jyu/.python-eggs/mesos-0.19.1-py2.7-macosx-10.8-x86_64.egg-tmp/_mesos.so,
2): Symbol not found:
__ZN5mesos20MesosSchedulerDriverC1EPNS_9SchedulerERKNS_13FrameworkInfoERKSs
Referenced from:
/Users/jyu/.python-eggs/mesos-0.19.1-py2.7-macosx-10.8-x86_64.egg-tmp/_mesos.so
Expected in: flat namespace
in
/Users/jyu/.python-eggs/mesos-0.19.1-py2.7-macosx-10.8-x86_64.egg-tmp/_mesos.so
>>>
{noformat}
After digging this problem today, here is what I've found:
1. build/src/.libs/libmesos_no_3rdparty.a is built using clang++-3.3 with flags
-std=c++11 -stdlib=libc++. So the mangled MesosSchedulerDriver constructor
symbol is like the following in libmesos_no_3rdparty.a
{noformat}
[tw-mbp-jyu build]$ nm src/.libs/libmesos_no_3rdparty.a | grep
MesosSchedulerDriver
...
00000000000006d0 T
__ZN5mesos20MesosSchedulerDriverC1EPNS_9SchedulerERKNS_13FrameworkInfoERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE
...
{noformat}
2.
build/src/python/build/temp.macosx-10.8-x86_64-2.7/native/mesos_scheduler_driver_impl.o
is built using clang++-3.3 without -stdlib=libc++
{noformat}
clang-3.3 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -g
-Qunused-arguments -Qunused-arguments
-I/tmp/build/mesos-0.19.1/build/../include
-I/tmp/build/mesos-0.19.1/build/include -I/tmp/build/mesos-0.19.1/build/src
-I/tmp/bui
ld/mesos-0.19.1/build/src/python/native
-I/tmp/build/mesos-0.19.1/build/3rdparty/libprocess/3rdparty/protobuf-2.5.0/src
-I/opt/twitter/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/include/python2.7
-c native/mesos_
scheduler_driver_impl.cpp -o
build/temp.macosx-10.8-x86_64-2.7/native/mesos_scheduler_driver_impl.o
{noformat}
As a result, it expects a mangled MesosSchedulerDriver constructor symbol like
the following:
{noformat}
[tw-mbp-jyu build]$ nm
src/python/build/temp.macosx-10.8-x86_64-2.7/native/mesos_scheduler_driver_impl.o
| grep MesosSchedulerDriver
U
__ZN5mesos20MesosSchedulerDriverC1EPNS_9SchedulerERKNS_13FrameworkInfoERKSs
...
{noformat}
3. As a result, the above symbol will remain 'unresolved' in _mesos.so, and
subsequently causes issue when we 'import mesos' using the egg.
--
This message was sent by Atlassian JIRA
(v6.2#6252)