免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 术士
打印 上一主题 下一主题

请教一个GCC编译的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-11 12:23 |显示全部楼层 |倒序浏览
有三个文件夹include,main,src 其中src下面放了函数,在include下面定义了个头文件,我在main下面建立了一个主函数,需要引用src下面的一个函数文件,于是我在main下面的文件里面include了头文件。然后Makefile这样写:
INC=-Iinclude
fac:fac.o
        gcc $(INC) -o fac fac.o
fac.o:../../include/mylib.h fac.c
        gcc $(INC) -c  fac.c
.PHONY:clean
clean:
        rm -f *.o main


为什么用gcc编译后,gcc一直报错:


-Iinclude -o fac fac.o
fac.o(.text+0x54): In function `main':
: undefined reference to `factorial'
collect2: ld returned 1 exit status
make: *** [fac] Error 1

搞了一上午想不明白。

论坛徽章:
0
2 [报告]
发表于 2008-03-11 14:14 |显示全部楼层
我想:已经在main函数里面包含了头文件,当编译器进行编译main的时候会把子函数的实现扩展到man函数实现里面,然后生成.o文件,就不需要factorial.o了吧。反之,我如果makefile写成这样:
fac:fac.o factorial.o
        gcc -o fac fac.o factorial.o
fac.o:fac.c
        gcc -c  fac.c
factorial.o:../../src/factorial.c
        gcc -c ../../src/factorial.c
.PHONY:clean
clean:
        rm -f *.o main

把所有的函数都编译成.o然后进行链接,这样可以成功,但是我在main函数里面包含的头文件也就没必要了。
我的想法是把一些常用的子函数都写成.c文件,然后包含到头文件里面。我以后再写程序的时候在main函数里面只需要包含头文件,就可以使用原来的子函数,而makefile文件里面也不去编译子函数的.c文件,如果很多.c文件,这样岂不是很麻烦。我觉得主要问题在于我写的makefile文件,初学makefile,help me.

论坛徽章:
0
3 [报告]
发表于 2008-03-11 21:00 |显示全部楼层
我那样用头文件肯定没问题,最简单的了,但是那样编译为什么不对,我上面的想法哪个地方错了?

论坛徽章:
0
4 [报告]
发表于 2008-03-11 22:21 |显示全部楼层
哦,明白了,那是链接做的事情,那么我使用系统的头文件,可以直接使用所包含的一些函数,我也想模拟这样的用法,于是采用了上面的方法,一直实现不了,能不能指点一下思路?

论坛徽章:
0
5 [报告]
发表于 2008-03-12 13:10 |显示全部楼层
我觉得这样做的话,我自己可以定义一个函数库,以后使用通用函数的时候只需要使用头文件即可,不必去理会子函数的代码在哪里,怎么实现的,C语言的库不也是这样的吗,这样模拟出来,我觉得很爽阿。
快给指点什么办法,谢过了。

论坛徽章:
0
6 [报告]
发表于 2008-03-13 19:08 |显示全部楼层
搞明白了。:em11: :em11:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP