注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

makefile学习(二)  

2010-07-24 00:15:41|  分类: LINUX编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天接着华丽丽的登场
今天先讲一个BUG,commands commence before first target. Stop,在编写库的MAKEFILE时,人家给了我一个华丽丽的大脸,满脸的星星,刺得人眼花。找来找去,找去找来

,又找来找去,找去找来,神,AR= ar,这个,要在前面加一个TAB,否则,不OK,你不OK,他不OK,我得MAKEFILE不就OVER啦。
而在生成动态库SO时,如果你没有给LIB=libaaa.a  $(LIB):aaa.o,如果你没有后面这个依赖项,下面的$(LD)就会失去意义,当然,就会报一个“***没有规则可以创建ALL需要的目标libaaa.o”,事儿真多啊。没办法,谁让咱们水平有限呢。这里我出现滴错误捏是写错了目标,痛心啊,为什么有变量不用,偏偏自己要再写一次libaaa.a:,显得很拽么,

我看可能是这样想的。
说到这儿说几句MAKEFILE的不大跑题的题外话,也就是LINUX下库的生成MAKEFILE如何写:
1、库有动态和静态之分,神,傻子也知道。
2、库应该以libxxx.a 或libxxx.so的方式出现,否则会报找不到相对应的库,如果你要对着干,汗一个,怎么什么都对着干。
3、动态库要拷贝到usr/lib目录下,别对着干了,听我一句话,OK。
4、动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号。
5、可以用命令ldd xxx程序来查看包含的库内容。相当于VC下的Depends工具,或者dumpbin -exports xxx.dll.
6、在gcc 的-I参数后加上库头文件的路径;在gcc 的-L参数后加上库文件所在目录;在gcc 的-l参数后加上库文件名,但是要去掉lib和.a扩展名,比如库文件名是libtest.a 那么参数就是-ltest。
7、如果使用-I. -L.,特别提醒,这里有点,即DOT,我一开始就忽略了,结果不成,就是当前路径的意思。-l这个选项,是和去掉马甲(即前缀lib, 后缀so)的库名字写在一起的,当然,写不在一起党也不会批评你。
-fPIC:表示编译为位置独立的代码,以达到真正代码共享的目的。
8、如果遇到仍然找不到动态库的情况,修改LD_LIBRARY_PATH 或者/etc/ld.so.conf文件来指定路径,基本就不会有什么问题了。

哗,好一片,一晚上的成果啊,不容易,接着说咱们的MAKEFILE,昨天说不写总的目标文件也可以,但今天却怎么也测试不过了,不知道为什么,只好自己又把ALL目标大人请了出来,OK了。
又一天过去了,太晚咧,该休息咧,有时间的话,明天听我接着白话MAKEFILE或者USB的驱动。谢谢童鞋们。再见。

  评论这张
 
阅读(757)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017