已成功连接到库却undefined reference to 错误

遇到了一个非常诡异的事情,makefile 已经写好: 
`cppflags= 
headers=-I ../../inc 
libs=-lpuck -L ../../lib

../bin/input: input.cpp 
mkdir -p ../bin 
g++ $(cppflags) $(headers) $(libs) -o $$^`

本来这个makefile 在centos下是没有问题的,然而在ubuntu下出现了问题,虽然已经成功链接到库文件,但是还是会有undefined reference to的错误,通常来讲,这种问题只会没有成功连接到库文件的时候才会出现,gcc/++在编译时查找库文件的顺序是: 
1、-L 指定的路径, 从左到右依次查找 
2、由 环境变量 LIBRARY_PATH 指定的路径,使用”:”分割从左到右依次查找 
3、/etc/ld.so.conf 指定的路径顺序 
4、/lib 和 /usr/lib (64位下是/lib64和/usr/lib64)

所以我这个makefile直接就满足了第一条,但还是有错误,在网上查了一下,竟然调整了一下连接选项的位置就可以了!!: 
`cppflags= 
headers=-I ../../inc 
libs=-lpuck -L ../../lib

../bin/input: input.cpp 
mkdir -p ../bin 
g++ -o $$$(cppflags) $(headers) $(libs) 
不知道这是什么原因,看来是不同系统下这个gcc/++实现也是有所差距,有知道的还望指明原因。。

有一点眉目,但也不能解释现在这个问题,对于-l链接库的顺序,编译器是从右往左连接的,如果链接库之间有依赖关系,应当注意链接库的顺序,比如 库A 依赖 库B,那么写成 -lB -lA就会报错。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值