GCC依赖库顺序问题

本文分享了在将Linux下的ipmsg移植到Windows过程中遇到的GCC编译依赖库顺序问题及解决方案。文中提到,当liba.a依赖于libb.a时,必须按-la-lb的顺序指定。此外,还介绍了两种解决复杂依赖关系的方法:重复指定依赖库或使用-gcc的-Xlinker选项。
今天在把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++认不出"-)",不加也可以链接成功。
 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值