You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Vinod Kone (JIRA)" <ji...@apache.org> on 2014/09/03 01:29:52 UTC

[jira] [Commented] (MESOS-1754) Mesos static library has undefined symbols from 3rd party deps

    [ https://issues.apache.org/jira/browse/MESOS-1754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14118952#comment-14118952 ] 

Vinod Kone commented on MESOS-1754:
-----------------------------------

Looks like some of the 3rd party deps are not included in the static archive during libtool link step. Not sure if we are missing a flag or something. cc. [~tstclair]

shared library includes glog and zookeeper for example.
{code}
libtool: link: g++ -shared -nostdlib /usr/lib/../lib64/crti.o /opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.1/crtbeginS.o  -Wl,--whole-archive ./.libs/libmesos_no_3rdparty.a ../3rdparty/libprocess/.libs/libprocess.a ./.libs/libjava.a -Wl,--no-whole-archive  ../3rdparty/libprocess/3rdparty/glog-0.3.3/.libs/libglog.a -L/usr/lib/../lib64 ../3rdparty/leveldb/libleveldb.a ../3rdparty/zookeeper-3.4.5/src/c/.libs/libzookeeper_mt.a ../3rdparty/libprocess/3rdparty/protobuf-2.5.0/src/.libs/libprotobuf.a /home/vinod/mesos/build/3rdparty/libprocess/3rdparty/glog-0.3.3/.libs/libglog.a -lpthread /home/vinod/mesos/build/3rdparty/libprocess/3rdparty/libev-4.15/.libs/libev.a -lsasl2 -lcurl -lz -lrt /usr/lib64/libunwind.so -lgcc -L/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.1 -L/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.1/../../../../lib64 -L/lib/../lib64 -L/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.1/../../.. -lstdc++ -lm -lc -lgcc_s /opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.1/crtendS.o /usr/lib/../lib64/crtn.o    -pthread -Wl,-soname -Wl,libmesos-0.21.0.so -o .libs/libmesos-0.21.0.so
{code} 

static archive doesn't include glog or zookeeper for example.
{code}
libtool: link: ar cru .libs/libmesos.a ../3rdparty/leveldb/libleveldb.a   .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-state.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-docker.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libstate_la-zookeeper.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-group.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-detector.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-registrar.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-http.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-auxprop.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-gc.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-recover.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-type_utils.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-repairer.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-scheduler.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-slave.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt2-libmesos_no_3rdparty_la-constants.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-files.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-usage.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-launch.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-authorizer.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-sched.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-consensus.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libstate_la-log.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-mem.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-coordinator.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt5-libmesos_no_3rdparty_la-containerizer.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-launcher.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-logging.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-initialize.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-isolator.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libstate_la-leveldb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libbuild_la-build.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-values.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-catchup.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-resources.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-read.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-composing.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-log.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-external_containerizer.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-perf.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-attributes.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt1-liblog_la-replica.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-containerizer.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt1-libmesos_no_3rdparty_la-http.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libstate_la-in_memory.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-log.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-scheduler.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-benchmark.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-replica.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-authentication.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt4-libmesos_no_3rdparty_la-docker.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-local.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-zookeeper.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-exec.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libstate_la-state.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-messages.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt6-libmesos_no_3rdparty_la-contender.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-master.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt3-libmesos_no_3rdparty_la-http.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-monitor.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-lock.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-cpushare.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-thread.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-cgroups.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-containerizer.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-protobuf_utils.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-drf_sorter.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-linux_launcher.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-constants.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-contender.o .libs/libmesos.lax/libmesos_no_3rdparty.a/lt7-libmesos_no_3rdparty_la-detector.o .libs/libmesos.lax/libmesos_no_3rdparty.a/liblog_la-leveldb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-status_update_manager.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-date_utils.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-mesos.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-registry.pb.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-perf_event.o .libs/libmesos.lax/libmesos_no_3rdparty.a/libmesos_no_3rdparty_la-fs.o  .libs/libmesos.lax/libprocess.a/libprocess_la-metrics.o .libs/libmesos.lax/libprocess.a/libprocess_la-timeseries.o .libs/libmesos.lax/libprocess.a/libprocess_la-http.o .libs/libmesos.lax/libprocess.a/libprocess_la-reap.o .libs/libmesos.lax/libprocess.a/libry_http_parser_la-http_parser.o .libs/libmesos.lax/libprocess.a/libprocess_la-subprocess.o .libs/libmesos.lax/libprocess.a/libprocess_la-process.o .libs/libmesos.lax/libprocess.a/libprocess_la-pid.o .libs/libmesos.lax/libprocess.a/libprocess_la-latch.o  .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_MesosSchedulerDriver.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_state_LevelDBState.o .libs/libmesos.lax/libjava.a/libjava_la-log4j.o .libs/libmesos.lax/libjava.a/libjava_la-construct.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_Log.o .libs/libmesos.lax/libjava.a/libjava_la-convert.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_state_ZooKeeperState.o .libs/libmesos.lax/libjava.a/libjava_la-zookeeper.o .libs/libmesos.lax/libjava.a/libjava_la-jvm.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_MesosExecutorDriver.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_state_Variable.o .libs/libmesos.lax/libjava.a/libjava_la-org_apache_mesos_state_AbstractState.o
{code}

Perhaps orthogonal, but I'm not sure why we link non-libtool version of leveldb (.a) instead of the libtool version (.la). There is a comment in the Makefile but I don't understand it. It throws warnings like these. cc [~benjaminhindman]
{code}
/bin/sh ../libtool --tag=CC --tag=CXX  --mode=link gcc  -g -Wno-unused-local-typedefs -release 0.21.0  -o libmesos.la -rpath /usr/local/lib    libmesos_no_3rdparty.la ../3rdparty/libprocess/3rdparty/glog-0.3.3/libglog.la  ../3rdparty/leveldb/libleveldb.a  ../3rdparty/zookeeper-3.4.5/src/c/libzookeeper_mt.la  ../3rdparty/libprocess/3rdparty/protobuf-2.5.0/src/libprotobuf.la  ../3rdparty/libprocess/libprocess.la libjava.la -lsasl2 -lcurl -lz  -lrt -lunwind
libtool: link: warning: `/usr/lib/../lib64/libunwind.la' seems to be moved

*** Warning: Linking the shared library libmesos.la against the
*** static library ../3rdparty/leveldb/libleveldb.a is not portable!
libtool: link: warning: `/usr/lib/../lib64/libunwind.la' seems to be moved
{code}


> Mesos static library has undefined symbols from 3rd party deps
> --------------------------------------------------------------
>
>                 Key: MESOS-1754
>                 URL: https://issues.apache.org/jira/browse/MESOS-1754
>             Project: Mesos
>          Issue Type: Bug
>    Affects Versions: 0.20.0
>            Reporter: Vinod Kone
>            Assignee: Vinod Kone
>
> Looks like the static libmesos library that we build is missing some symbols from 3rd party deps (e.g, GLOG, ZooKeeper). I suspect this has to do with the order of libraries defined on the linker command line.
> {code}
> zookeeper_init symbol is present in .so but not in .a.
> $ nm libmesos.so | grep zookeeper_init
> 00000000030519f0 T zookeeper_init
> $ nm libmesos.a | grep zookeeper_init
> nm: libleveldb.a: File format not recognized
>                  U zookeeper_init
> Same with google::InstallFailureSignalHandler.
> $ nm libmesos.so | grep InstallFailureSignalHandler
> 000000000301901d T _ZN6google27InstallFailureSignalHandlerEv
> $ nm libmesos.a | grep InstallFailureSignalHandler
> nm: libleveldb.a: File format not recognized
>                  U _ZN6google27InstallFailureSignalHandlerEv
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)