zoukankan      html  css  js  c++  java
  • error adding symbols: DSO missing from command line

    最近做做项目的时候,在编译代码的时候遇到很多棘手的问题,网上的资料也比较少。关于上诉问题,我就是来说说看。

    DSO missing from command line原因及解决办法,我也是看了这篇文章的介绍,才对这个错误有写认识。

    大概就是说,如果库B依赖了库A来静态编译,那么库B就会有库A的链接信息,那我们就来说说错误的情况

    $ g++ main.cpp -lA -lB -o main  

    会输出

    /usr/bin/ld: /usr/local/lib/libB.a(main.cpp.o): undefined reference to symbol '_a_symbol_name'
    /usr/local/lib/libA.so: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status

    当时上文博主说过,在binutils<2.22的时候没有问题,后面就有问题了。

    那这个应该是编译问题,ld自动递归地解析链接的lib,当加载A库的时候,一切还正常,但是加载B库的时候,ld会自动的去解析他的静态链接,所以就重复了,导致error adding symbols。所以下面这个就没有问题了。

    $ g++ main.cpp -lB -lA -o main  

    这样就编译正常了,程序也能够正常运行。

    关于链接库的顺序问题,我看了下链接库的顺序问题一文,正常的情况下,链动态接库时是从左至右开始链接,如果出现了顺序错误,gcc自动帮我们重定位,我认为保险的方式是做好库的顺序。

    那我这里稍微整理了下链接顺序。

    1. 高层静态链接库

    2. 底层依赖库

    3. 高层动态链接库

    4. 其他无关系链接库





    ….fuck,fuck! 重写两次了,第一次断电能理解,第二次莫名其妙的关了次电脑,来吧,我们都是文明人,这只是个小插曲,我们继续。。。



  • 相关阅读:
    手机app打开的web,在打开chrome浏览器
    linux环境下安装yaf
    redis在ubuntu下的安装
    验证一个值是否在多维数组中
    20个正则表达式
    nginx+memcached缓存图片
    cocos2dx加载骨骼动画,获取骨骼位置
    listview的pushBackDefaultItem中的item属性被修改问题
    lua保留n位小数方法
    cocos2dx中node的pause函数(lua)
  • 原文地址:https://www.cnblogs.com/Hocker/p/8269506.html
Copyright © 2011-2022 走看看