请教一个GCC编译的问题

发布于 2022-09-24 02:12:45 字数 675 浏览 20 评论 0

有三个文件夹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

搞了一上午想不明白。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

欢烬 2022-10-01 02:12:45

头文件是找到了,可是链接fac.o的时候怎么找到函数的实现呢?比如你的factorial函数所在的.o文件是怎么找到的呢?

椒妓 2022-10-01 02:12:45

我想:已经在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.

¢蛋碎的人ぎ生 2022-10-01 02:12:45

我那样用头文件肯定没问题,最简单的了,但是那样编译为什么不对,我上面的想法哪个地方错了?

廻憶裏菂餘溫 2022-10-01 02:12:45

原帖由 术士 于 2008-3-11 14:14 发表
我想:已经在main函数里面包含了头文件,当编译器进行编译main的时候会把子函数的实现扩展到man函数实现里面,然后生成.o文件,就不需要factorial.o了吧。反之,我如果makefile写成这样:
fac:fac.o factorial ...

“当编译器进行编译main的时候会把子函数的实现扩展到man函数实现里面”
那么,还要链接干什么?

智商已欠费 2022-10-01 02:12:45

哦,明白了,那是链接做的事情,那么我使用系统的头文件,可以直接使用所包含的一些函数,我也想模拟这样的用法,于是采用了上面的方法,一直实现不了,能不能指点一下思路?

是你 2022-10-01 02:12:45

关键你干嘛觉得这样很爽?
虽然有个办法可以做到,但是鄙人实在不希望有人采用。

[ 本帖最后由 cjaizss 于 2008-3-11 23:05 编辑 ]

找个人就嫁了吧 2022-10-01 02:12:45

我觉得这样做的话,我自己可以定义一个函数库,以后使用通用函数的时候只需要使用头文件即可,不必去理会子函数的代码在哪里,怎么实现的,C语言的库不也是这样的吗,这样模拟出来,我觉得很爽阿。
快给指点什么办法,谢过了。

冷血 2022-10-01 02:12:45

请习惯-L和-l

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文