免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8336 | 回复: 12
打印 上一主题 下一主题

makefile中的.o文件not found [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-18 16:25 |只看该作者 |倒序浏览
各位大虾。我写了一个makefile文件。

内容大致如下:
lll : lll.o aa.o cc.o
cc -o lll lll.o aa.o cc.o -liconv

aa.o : ../src/aa.c ../src/aa.h ../src/bb.c ../src/bb.h
cc -c ../src/aa.c -liconv

cc.o : ../src/cc.c ../src/cc.h ../src/dd.c ../src/dd.h
cc -c ../src/cc.c -liconv

lll.o : ../src/lll.c ../src/aa.c ../src/aa.h ../src/bb.c ../src/bb.h ../src/cc.c ../src/cc.h -liconv
cc -c ../src/lll.c -licnov

运行sh makefile,得到如下结果:
cc: 1501-228 input file aa.o not found
cc: 1501-228 input file cc.o not found
cc: 1501-228 input file lll.o not found
makefile[4]: aa.o:  not found
makefile[7]: cc.o:  not found
makefile[10]: lll.o:  not found

以上makefile文件有什么问题吗?似乎有时候可以生成lll可执行文件,有时候不能。
这个是什么原因呢?
谢谢各位大虾。

论坛徽章:
0
2 [报告]
发表于 2009-11-18 16:27 |只看该作者
,照我们头儿的话,古老的问题

论坛徽章:
0
3 [报告]
发表于 2009-11-18 16:29 |只看该作者

回复 #2 peidright 的帖子

楼上能详细解释一下吗?谢谢。

论坛徽章:
0
4 [报告]
发表于 2009-11-18 18:27 |只看该作者
-c -l

论坛徽章:
0
5 [报告]
发表于 2009-11-19 09:15 |只看该作者

回复 #4 ljysyn 的帖子

楼上朋友的意思是要这样写吗?
将cc -o lll lll.o aa.o cc.o -liconv改为:
cc -o lll lll.o aa.o cc.o -l -liconv

我照以上方法改过了,编译结果如下:
cc: 1501-208 command option l is missing a subargument
cc: 1501-239 Warning: More than one source file with -c and -o: -o ignored
cc: 1501-228 input file aa.o not found

以上错误是什么原因呢?如何改正?谢谢。

还有就是如果要连接多个库的话,是不是要写成这样:
cc -o lll lll.o aa.o cc.o -l -l1 -l -l2
而不能写成这样:
cc -o lll lll.o aa.o cc.o -l -l1 -l2
谢谢。

[ 本帖最后由 chen_hy 于 2009-11-19 09:19 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-11-19 09:32 |只看该作者
如果真的想讨论的话,请把make命令的执行过程*完整*的贴出来,一系列的执行过程,
明明可以贴出来的内容,要人家根据makefile内容和输出的最后结果,猜中间发生什么事情,很没意思的

论坛徽章:
0
7 [报告]
发表于 2009-11-19 09:47 |只看该作者

回复 #6 drangon 的帖子

好的。

makefile内容如下:

cc -o common_define.o -c ../src/common_define.c -l -liconv -lc_r -ldl -ltli_r -l
m_r -brtl -lclients -L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_PATH}

cc -o scan.o -c ../src/scan.c ../src/common_define.c -l -licon
v -lc_r -ldl -ltli_r -lm_r -brtl -lclients -L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_
PATH}

cc -o tuxaaaa.o -c ../src/tuxaaaa.c ../src/common_define.c ../src/scan.
c -l -liconv -lc_r -ldl -ltli_r -lm_r -brtl -lclients -L ${LD_LIBRARY_PATH} -I {
LD_LIBRARY_PATH}

cc -o tuxbbbb.o -c ../src/common_define.c ../src/scan.c ../src/tuxbbbb.
c -l -liconv -lc_r -ldl -ltli_r -lm_r -brtl -lclients -L ${LD_LIBRARY_PATH} -I {
LD_LIBRARY_PATH}

cc -o start.o -c ../src/common_define.c ../src/scan.c ../src/tux489
0.c -l ../src/tuxaaaa.c ../src/start.c -liconv -lc_r -ldl -ltli_r -lm_r -brt
l -lclients -L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_PATH}

cc -o stop.o -c ../src/common_define.c ../src/stop.c -l -liconv -lc_r -l
dl -ltli_r -lm_r -brtl -lclients -L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_PATH}

cc start.o common_define.o scan.o tuxaaaa.o tuxbbbb.o -o start
-L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_PATH}

cc stop.o common_define.o -o stop -L ${LD_LIBRARY_PATH} -I {LD_LIBRARY_P
ATH}

makefile执行结果如下:
$ sh makefile
cc: 1501-208 command option l is missing a subargument
cc: 1501-208 command option l is missing a subargument
cc: 1501-208 command option l is missing a subargument
cc: 1501-208 command option l is missing a subargument
cc: 1501-239 Warning: More than one source file with -c and -o: -o ignored
../src/common_define.c:
../src/scan.c:
../src/tuxbbbb.c:
../src/start.c:
cc: 1501-208 command option l is missing a subargument
cc: 1501-228 input file tuxaaaa.o not found
cc: 1501-228 input file stop.o not found

论坛徽章:
0
8 [报告]
发表于 2009-11-19 10:10 |只看该作者
晕倒。。。。才发现 sh makefile 。。。。

如果你要写真正的makefile,就按makefile格式,用make来执行
如果是直接写编译脚本,就不要叫makefile

首先没有单独 -l 这样的写法,4楼的意思不是要加单独 -l,
而是如果用了 -c 来生成obj,就去掉所有 -lxxx,这两个没有用的,
只有在链接过程(生成可执行文件或者dso时)才要用到这个-lxxx的

另外使用make来执行makefile,make会自动查找依赖关系,决定先执行那个后执行那个
而你用sh执行,只会按顺序,自然找不到相应的obj文件了

论坛徽章:
0
9 [报告]
发表于 2009-11-19 10:36 |只看该作者

回复 #8 drangon 的帖子

谢谢楼上的。现在的错误是:
$ make
make: Cannot find a rule to create target -L from dependencies.
Stop.

是什么原因呢?谢谢。

论坛徽章:
0
10 [报告]
发表于 2009-11-19 10:40 |只看该作者
原帖由 chen_hy 于 2009-11-18 16:25 发表
各位大虾。我写了一个makefile文件。

内容大致如下:
lll : lll.o aa.o cc.o
cc -o lll lll.o aa.o cc.o -liconv

aa.o : ../src/aa.c ../src/aa.h ../src/bb.c ../src/bb.h
cc -c ../src/aa.c -liconv
...
lll.o : ../src/lll.c ../src/aa.c ../src/aa.h ../src/bb.c ../src/bb.h ../src/cc.c ../src/cc.h -liconv
...



  1. lll.o : ../src/lll.c ../src/aa.c ../src/aa.h ../src/bb.c ../src/bb.h ../src/cc.c ../src/cc.h -liconv
复制代码



有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP