美文网首页
动态链接库问题_20170309

动态链接库问题_20170309

作者: SOUL_CY | 来源:发表于2017-03-09 22:47 被阅读0次

    动态链接库原理

    1. 用时查找
    2. 查找路径:
    • 默认去/usr/lib /lib 下查找
    • 可以设置自定义路径:
    • export=LD_LIBRARY_PATH:yourpath
    • path多于一个要用‘:’隔开
    • 排在前面的path优先级高,在这里找到lib后不再往后找

    动态库冲突场景

    1. 环境主要有以下几种:
    • 开发环境
    • 编译环境
    • 测试发布环境
    • 线上发布环境
    1. 对于动态库而言,由于是用时查找,所以程序在这几个环境的动态库不一定一致,这可能会出问题
    2. 例如,某服务在开发环境时编译依赖了libcrfpp,服务正常,但发布环境的libcrfpp与开发环境不一致,服务就会异常

    问题如何发现

    1. 这种问题在编译阶段很难发现,因为动态库是用时加载
    2. 可以在项目首次部署在机器上时检查编好的lib包
    3. 命令:
    • cd your lib package
    • ls -lt | awk ‘{print $9}’| xargs ldd -r | grep 'undefine symbol'
    1. 如果没结果,恭喜你lib包在该环境没有依赖问题,否则,会看到有未定义的符号错误
    2. 根据该错误信息猜测是哪个lib库,找到合适的lib库替换。

    更好的解决方法

    1. 最好能整理出项目依赖的关键基础库,打成包放在项目中管理
    2. 在项目启动时将该包路径export,这样就能避免动态库版本不一致问题

    相关文章

      网友评论

          本文标题:动态链接库问题_20170309

          本文链接:https://www.haomeiwen.com/subject/vobggttx.html