• Oceanbase:ld升级导致的error adding symbols: DSO missing from command line


    问题描述:

    换了一台10.11.1.192编译OB,遇到下面这个问题

    make[2]: Entering directory `/home/indextest/obs/Paper_2018_longfei_shiyan/oceanbase/src/lsync'
    g++ -DPACKAGE_NAME="OceanBase" -DPACKAGE_TARNAME="oceanbase" -DPACKAGE_VERSION="0.4.2.9" -DPACKAGE_STRING="OceanBase 0.4.2.9" -DPACKAGE_BUGREPORT="qushan@taobao.com" -DPACKAGE_URL="http://oceanbase.taobao.org/" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=".libs/" -DPACKAGE="oceanbase" -DVERSION="0.4.2.9" -DRELEASEID="" -I.  -I/home/indextest/lib/tb-common-utils/include/tbsys -I/home/indextest/lib/libonev/include/onev -I../../include -I../../src  -D__STDC_LIMIT_MACROS -D_OB_VERSION=400 -D__STDC_CONSTANT_MACROS -D_NO_EXCEPTION 	-Wall -Werror -Wextra -Wunused-parameter 	-Wformat -Wconversion -Wno-deprecated -fno-strict-aliasing -g -Wno-ignored-qualifiers -DORDER_SERIALIZE -D__LSYNC_DEBUG__  -MT svn_version.o -MD -MP -MF .deps/svn_version.Tpo -c -o svn_version.o `test -f '../../svn_version.cpp' || echo './'`../../svn_version.cpp
    mv -f .deps/svn_version.Tpo .deps/svn_version.Po
    /bin/sh ../../libtool  --tag=CXX  --preserve-dup-deps --mode=link g++ -D__STDC_LIMIT_MACROS -D_OB_VERSION=400 -D__STDC_CONSTANT_MACROS -D_NO_EXCEPTION 	-Wall -Werror -Wextra -Wunused-parameter 	-Wformat -Wconversion -Wno-deprecated -fno-strict-aliasing -g -Wno-ignored-qualifiers -DORDER_SERIALIZE -D__LSYNC_DEBUG__  -lpthread -lc -lm -lrt -ldl -laio -lcrypt -lssl    -o lsyncserver main.o ob_lsync_server_main.o ob_lsync_server_param.o ob_lsync_server.o ob_seekable_log_reader2.o ob_lsync_callback.o svn_version.o ../../src/updateserver/libupdateserver.a ../../src/rootserver/librootserver.a ../../src/mergeserver/libmergeserver.a ../../src/sstable/libsstable.a ../../src/common/libcommon.a ../../src/common/compress/libcomp.a ../../src/sql/libsql.a ../../src/common/libcommon.a ../../src/common/btree/libbtree.a /home/indextest/lib/libonev/lib/libonev.a /home/indextest/lib/tb-common-utils/lib/libtbsys.a -lcrypt 
    libtool: link: g++ -D__STDC_LIMIT_MACROS -D_OB_VERSION=400 -D__STDC_CONSTANT_MACROS -D_NO_EXCEPTION -Wall -Werror -Wextra -Wunused-parameter -Wformat -Wconversion -Wno-deprecated -fno-strict-aliasing -g -Wno-ignored-qualifiers -DORDER_SERIALIZE -D__LSYNC_DEBUG__ -o lsyncserver main.o ob_lsync_server_main.o ob_lsync_server_param.o ob_lsync_server.o ob_seekable_log_reader2.o ob_lsync_callback.o svn_version.o  -lpthread -lc -lm -lrt -ldl -laio -lcrypt -lssl ../../src/updateserver/libupdateserver.a ../../src/rootserver/librootserver.a ../../src/mergeserver/libmergeserver.a ../../src/sstable/libsstable.a ../../src/common/libcommon.a ../../src/common/compress/libcomp.a ../../src/sql/libsql.a ../../src/common/libcommon.a ../../src/common/btree/libbtree.a /home/indextest/lib/libonev/lib/libonev.a /home/indextest/lib/tb-common-utils/lib/libtbsys.a -lcrypt
    /usr/local/bin/ld: /home/indextest/lib/libonev/lib/libonev.a(onev_ssl.o): undefined reference to symbol 'ERR_get_error@@libcrypto.so.10'
    /usr/lib64/libcrypto.so.10: error adding symbols: DSO missing from command line
    

    原因:

    在binutils<2.22时,ld正常完成了,bin_c对于foo的调用经由libB,传递到了libA,链接成功。
    但是当binutils>=2.22时,编译出错了,ld会报上面的错,告诉你foo这个symbol解析不到,这时,我们需要编译bin_c时,显示地链接libA才可以通过。
    binutils2.22开始,其中的ld开始把--no-copy-dt-needed-entries默认打开,这样一来,ld不会再自动递归地解析链接的lib,而需要由用户来一一指定。

    解决方法:

    在对应报错目录的Makefile.am下
    AM_LDFLAGS = -lpthread -lc -lm -lrt -ldl -laio -lcrypt -lssl ${GCOV_LIB}
    后加上
    -Xlinker --copy-dt-needed-entries

    参考:

    https://segmentfault.com/a/1190000002462705
    http://blog.sina.cn/dpool/blog/ArtRead.php?nid=785875540102vqtu&a_pos=1&oid=sina&vt=3&sessid=4e1ba8e24d8f882e9c257435e9d50e26
    http://www.cnblogs.com/wujianlundao/archive/2012/06/06/2538125.html
    http://www.cnblogs.com/OCaml/archive/2012/06/18/2554086.html

  • 相关阅读:
    Webservice学习之新建一个最简单的Webservice项目
    初学程序一定要养成良好的习惯
    你晚上睡好了吗?
    如何面对失恋?
    多病之秋少言多饮
    转:避开秋季相冲食物
    转:饭后九不要包你保健康
    转:五官不适预示五脏衰弱
    转:过度疲劳的27个信号与预防方法
    foxmail是不是不行了?
  • 原文地址:https://www.cnblogs.com/longf0720/p/7617226.html
Copyright © 2020-2023  润新知