免费注册 查看新帖 |

Chinaunix

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

[学习分享] gcc下简单的头文件编译小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-26 18:45 |只看该作者 |倒序浏览
本帖最后由 xufengww 于 2014-03-26 21:56 编辑

//first.h
void play();

//first.c
void play(){
     printf("hello,world!\n");
}

//second.c

#include "first.h"

void main(){
     play();
}

编译时cc second.c -o second 时出现未定义函数play().
这个是不是由于编译器无法找到first.c下的函数play()?
请问各位大侠,如何才能利用头文件的声明让second.c文件可以调用到first.c中定义的play()函数呢?
可不可以不用 "cc first.c second.c -o second" 的方法。

论坛徽章:
0
2 [报告]
发表于 2014-03-26 21:10 来自手机 |只看该作者
你的second.c要include first.h

论坛徽章:
0
3 [报告]
发表于 2014-03-26 21:54 来自手机 |只看该作者
本帖最后由 xufengww 于 2014-03-26 21:57 编辑

嗯嗯,我忘了打上去了,不过试了也是不行呢

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-03-27 08:09 |只看该作者
回复 3# xufengww


    我觉得应该是不行的.

如果你 include 一个头文件, 就能自动编译那个头文件同名的.c 文件, 这事有点不靠谱.
那你include 一个 stdio.h 咋搞?

要是 头文件这么NB, 谁还写 Makefile呀, 写个复杂的 全有的 .h 就行啦

论坛徽章:
0
5 [报告]
发表于 2014-03-27 13:06 |只看该作者
嗯嗯,我也觉得你说的挺有道理,不过我查了一下:http://blog.csdn.net/21aspnet/article/details/149810,这里讲得很详细呢!回复 4# q1208c


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-03-27 13:59 |只看该作者
回复 5# xufengww


    多谢.

论坛徽章:
0
7 [报告]
发表于 2014-03-27 18:55 |只看该作者
嘻嘻,其实本来我以为可以跟stdio.h等系统头文件一样,可以直接调用头文件里面声明的函数而不用一一编译然后在一起链接的,后来发现标准输入输出头文件中声明的各个函数是已经是经过编译成动态链接库的,所以有两种方法可以进行多文件编译:1、用makefile 2、先预编译成静态或者是动态链接库。。。回复 6# q1208c


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
8 [报告]
发表于 2014-03-28 08:14 |只看该作者
回复 7# xufengww


    stdio.h 这类标准库好象在编译的时候会自动链接的. 但有些非标准的库文件, 好象需要使用 -L 参数才行.

我代码写得少. 只偶尔从网上下载别人的代码(带Makefile)编译过.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP