编译问题请教

hao952456 2011-12-30 02:58:32
源代码放在 /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888里面,makefile也在这里
库路径为 /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib,
在makefile里面有这样的语句
MPP_PATH:=$(PWD)/../..
LIB_PATH:=$(MPP_PATH)/lib
LIBS := $(LIB_PATH)/libmpi.a \
$(LIB_PATH)/lib_VoiceEngine.a \
$(LIB_PATH)/lib_amr_spc.a



$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ $(LIBS)

这样编译居然没有任何问题,我加入打印信息 $(warning test LIBS is $(LIBS )) 发现输出的是

/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/libmpi.a /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/lib_VoiceEngine.a /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/lib_amr_spc.a

从上面看这个库路径应该是/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib/libmpi.a,这样的,但是makefile里面的居然是
/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/libmpi.a ,它还能编译连接ok,请问大家这个是什么原因呀?
...全文
74 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gqjjqg 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hao952456 的回复:]

实际上库文件仅仅是在/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib/这个下面的,其他的地方都没有库文件,我就不明白gcc根据makefile怎么找到库文件的,大家指导一下吧!
[/Quote]

makefile 有自己的规则的。
至于怎么找到lib
$(LIBS) 肯定是通过这个值。
具体实现的过程,建议参考 教你写makefile 先学会怎么写,再去看GNU make 的代码 。网上很多转载,百度or谷歌之。
赵4老师 2011-12-30
  • 打赏
  • 举报
回复
/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib/libmpi.a
/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/libmpi.a
难道不是一回事吗?(..表示向上一级目录啊)
nice_cxf 2011-12-30
  • 打赏
  • 举报
回复
PWD表示当前目录,也就是 /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888
MPP_PATH /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../..
LIB_PATH /opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib
makefile里面的这些变量并不去解析具体路径中的..等等,所以你写的是/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib
,他自然也就显示/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib
hao952456 2011-12-30
  • 打赏
  • 举报
回复
楼上请教一下
$(warning test LIBS is $(LIBS ))
这个输出的是
/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/sample/hishow888/../../lib/libmpi.a

不是
/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib/libmpi.a 这个怎么理解呢?
nice_cxf 2011-12-30
  • 打赏
  • 举报
回复
我晕,你难道连路径名里面的..表示上级目录都不知道么?
/mpp_master/sample/hishow888/../ 此时路径为/mpp_master/sample
/mpp_master/sample/hishow888/../.. 此时路径为/mpp_masters,所以两个路径是完全一样的,明白?
A33228371 2011-12-30
  • 打赏
  • 举报
回复
我也想学习关于编译的东西,顶一下!
hao952456 2011-12-30
  • 打赏
  • 举报
回复
实际上库文件仅仅是在/opt/Hi3520_SDK_V1.0.5.0.c2/mpp_master/lib/这个下面的,其他的地方都没有库文件,我就不明白gcc根据makefile怎么找到库文件的,大家指导一下吧!
nice_cxf 2011-12-30
  • 打赏
  • 举报
回复
sample/hishow888/../../这个跟没有是一样的,最终显然是相同的文件能OK是必然的啊

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧