[ 
https://issues.apache.org/jira/browse/MESOS-1010?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nikita Vetoshkin updated MESOS-1010:
------------------------------------

    Description: 
In my environment mesos build from master results in broken python api module 
{{_mesos.so}}:
{noformat}
nekto0n@ya-darkstar ~/workspace/mesos/src/python $ 
PYTHONPATH=build/lib.linux-x86_64-2.7/ python -c "import _mesos"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: 
/home/nekto0n/workspace/mesos/src/python/build/lib.linux-x86_64-2.7/_mesos.so: 
undefined symbol: _ZN6google14FlagRegistererC1EPKcS2_S2_S2_PvS3_
{noformat}
Unmangled version of symbol looks like this:
{noformat}
google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, 
char const*, void*, void*)
{noformat}
During {{./configure}} step {{glog}} finds {{gflags}} development files and 
starts using them, thus *implicitly* adding dependency on {{libgflags.so}}. 
This breaks Python extensions module and perhaps can break other mesos 
subsystems when moved to hosts without {{gflags}} installed.

  was:
In my environment mesos build from master results in broken python api module 
{{_mesos.so}}:
{noformat}
nekto0n@ya-darkstar ~/workspace/mesos/src/python $ 
PYTHONPATH=build/lib.linux-x86_64-2.7/ python -c "import _mesos"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: 
/home/nekto0n/workspace/mesos/src/python/build/lib.linux-x86_64-2.7/_mesos.so: 
undefined symbol: _ZN6google14FlagRegistererC1EPKcS2_S2_S2_PvS3_
{noformat}
Unmangled version of symbol looks like this:
{noformat}
google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, 
char const*, void*, void*)
{noformat}
Digging a bit deeper into build process I found that {{gflags}} library is 
dynamically linked and when autools(?) machinery assembles python library it 
doesn't mention {{-lgflags}}:
{noformat}
g++ -pthread -shared -Wl,-z,relro,--export-dynamic 
build/temp.linux-x86_64-2.7/native/mesos_executor_driver_impl.o 
build/temp.linux-x86_64-2.7/native/proxy_scheduler.o 
build/temp.linux-x86_64-2.7/native/proxy_executor.o 
build/temp.linux-x86_64-2.7/native/mesos_scheduler_driver_impl.o 
build/temp.linux-x86_64-2.7/native/module.o 
/home/nekto0n/workspace/mesos/src/.libs/libmesos_no_3rdparty.a 
/home/nekto0n/workspace/mesos/3rdparty/libprocess/3rdparty/protobuf-2.5.0/src/.libs/libprotobuf.a
 /home/nekto0n/workspace/mesos/3rdparty/leveldb/libleveldb.a 
/home/nekto0n/workspace/mesos/3rdparty/zookeeper-3.4.5/src/c/.libs/libzookeeper_mt.a
 /home/nekto0n/workspace/mesos/3rdparty/libprocess/.libs/libprocess.a 
/home/nekto0n/workspace/mesos/3rdparty/libprocess/3rdparty/glog-0.3.3/.libs/libglog.a
 
/home/nekto0n/workspace/mesos/3rdparty/libprocess/3rdparty/libev-4.15/.libs/libev.a
 -L/usr/lib64 -L./src/.libs/ -lpython2.7 -o 
build/lib.linux-x86_64-2.7/_mesos.so -lsasl2 -lcurl -lz -lrt -lunwind
{noformat}
Simply adding this agrument fixes the issue:
{noformat}
nekto0n@ya-darkstar ~/workspace/mesos/src/python $ ldd 
build/lib.linux-x86_64-2.7/_mesos.so 
        ...
        libgflags.so.0 => /lib64/libgflags.so.0 (0x00007f0f07e1f000)
        ...
{noformat}

        Summary: Python extension build is broken if gflags-dev is installed  
(was: Undefined symbol in Python extension)

> Python extension build is broken if gflags-dev is installed
> -----------------------------------------------------------
>
>                 Key: MESOS-1010
>                 URL: https://issues.apache.org/jira/browse/MESOS-1010
>             Project: Mesos
>          Issue Type: Bug
>          Components: build, python api
>         Environment: Fedora 20, amd64. GCC: 4.8.2.
>            Reporter: Nikita Vetoshkin
>
> In my environment mesos build from master results in broken python api module 
> {{_mesos.so}}:
> {noformat}
> nekto0n@ya-darkstar ~/workspace/mesos/src/python $ 
> PYTHONPATH=build/lib.linux-x86_64-2.7/ python -c "import _mesos"
> Traceback (most recent call last):
>   File "<string>", line 1, in <module>
> ImportError: 
> /home/nekto0n/workspace/mesos/src/python/build/lib.linux-x86_64-2.7/_mesos.so:
>  undefined symbol: _ZN6google14FlagRegistererC1EPKcS2_S2_S2_PvS3_
> {noformat}
> Unmangled version of symbol looks like this:
> {noformat}
> google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, 
> char const*, void*, void*)
> {noformat}
> During {{./configure}} step {{glog}} finds {{gflags}} development files and 
> starts using them, thus *implicitly* adding dependency on {{libgflags.so}}. 
> This breaks Python extensions module and perhaps can break other mesos 
> subsystems when moved to hosts without {{gflags}} installed.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to