• GCC依赖库顺序问题


    今天在把linux下做的ipmsg移植到windows过程中,因为包含了一个开源库SimpleSocket,而这个库又引用了winsock2,没太注意就写下了下面的makefile:

    g++ -o tt tt.o -lws2_32 -lclsocketd

    结果报出了N多丑陋的undefined reference..之后尝试将-lws2_32和-lclsocketd交换位置后,编译通过。

    上网查了下,发现gcc编译时依赖库的顺序是很重要的。比如说,liba.a依赖于libb.a,则必须写成-la -lb,似乎感觉这种顺序很奇怪。另外参考网上http://www.cppblog.com/findingworld/archive/2008/11/09/66408.html的内容,在库比较多依赖关系比较复杂或者相互依赖或者自己不清楚的情况下,可以采取下面2种办法:

    1、-la -lb -la,丑陋,但是有效。
    2、gcc有这样的选项,-Xlinker,写成如下格式可以强制gcc重复查找依赖库:
     
    g++ -o tt tt.o -Xlinker "-(" -lws2_32 -lclsocketd -Xlinker "-)" 

    这样在括号中的库的依赖关系就不需要你操心啦,虽然会延长链接时间。不过本人在实际使用过程中,g++认不出"-)",不加也可以链接成功。
     


     
  • 相关阅读:
    卡特兰数
    割点和桥
    子序列(超级水)
    react 进行时
    又开启react之路
    关于特殊字体
    react 组件传值
    git 的安装和项目建立
    ES6 let and const
    js封装的一行半显示省略号(字数自由控制)
  • 原文地址:https://www.cnblogs.com/lidabo/p/4628893.html
Copyright © 2020-2023  润新知