免费注册 查看新帖 |

Chinaunix

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

关于库、头文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-01 18:30 |只看该作者 |倒序浏览
这两者的关系怎么整,头文件加函数体就是库文件?理解不清楚,有点含糊。

论坛徽章:
0
2 [报告]
发表于 2008-11-01 19:19 |只看该作者
看不懂你在问什么。

库是你封装好的接口(隐藏你自己的实现),库的用途是给别人调用,当然需要头文件,否则人家怎么知道你的函数定义原型?还有编译也过不了,还有库文件。

[ 本帖最后由 nicozhou 于 2008-11-1 19:25 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-01 19:21 |只看该作者
头文件就是一种形式,相当于使用说明书,库文件就是那工具了

论坛徽章:
0
4 [报告]
发表于 2008-11-01 22:00 |只看该作者

回复 #1 wrsg 的帖子

头文件和库:
库是例程,干活的。
头文件是标签,共查阅。就象楼上说的,可当说明书。

要不然你做了个库,你通过什么方式让别人用啊?当然,这个是C的理解了。

头文件用来编译,库文件用来链接。头文件是声明、库文件是实现。这个你自己弄个makefile,写写程序,估计就能理解了。

论坛徽章:
0
5 [报告]
发表于 2008-11-02 12:35 |只看该作者
原帖由 nicozhou 于 2008-11-1 19:19 发表
看不懂你在问什么。

库是你封装好的接口(隐藏你自己的实现),库的用途是给别人调用,当然需要头文件,否则人家怎么知道你的函数定义原型?还有编译也过不了,还有库文件。

嗯,我问得比较含糊,表述不清。

原帖由 samon_fu 于 2008-11-1 22:00 发表
头文件和库:
库是例程,干活的。
头文件是标签,共查阅。就象楼上说的,可当说明书。

要不然你做了个库,你通过什么方式让别人用啊?当然,这个是C的理解了。

头文件用来编译,库文件用来链接。头文件 ...

我想写一个自己用的库,那是不是应该这样理解:
应该包含*.h和.c两个文件,把这两个文件放到当前工作目录下,然后GCC编译程序的时候使用-I来指定当前路径进行编译,这样理解对否?
我初学C,对于编写自己的库和makefile感觉无从下手。

论坛徽章:
0
6 [报告]
发表于 2008-11-02 16:08 |只看该作者
原帖由 wrsg 于 2008-11-2 12:35 发表

嗯,我问得比较含糊,表述不清。


我想写一个自己用的库,那是不是应该这样理解:
应该包含*.h和.c两个文件,把这两个文件放到当前工作目录下,然后GCC编译程序的时候使用-I来指定当前路径进行编译,这样 ...

看下书嘛 最基本的书的讲得有
这样问来问去的 不觉得浪费时间?

论坛徽章:
0
7 [报告]
发表于 2008-11-02 18:21 |只看该作者
原帖由 blizzard213 于 2008-11-2 16:08 发表

看下书嘛 最基本的书的讲得有
这样问来问去的 不觉得浪费时间?

正在看书,想问问是否这样理解,因为书里使用一个自定义的库,但是没说明怎么使用。

论坛徽章:
0
8 [报告]
发表于 2008-11-02 21:09 |只看该作者
原帖由 wrsg 于 2008-11-2 12:35 发表

嗯,我问得比较含糊,表述不清。


我想写一个自己用的库,那是不是应该这样理解:
应该包含*.h和.c两个文件,把这两个文件放到当前工作目录下,然后GCC编译程序的时候使用-I来指定当前路径进行编译,这样 ...



-I参数制定的是头文件的路径。   I~include
-L制定的是链接路径           L~link

论坛徽章:
0
9 [报告]
发表于 2008-11-03 00:51 |只看该作者
试写了一下
  1. /*lib.h*/
  2. void bill(char *);
  3. void fred(int);
复制代码
  1. /*bill.c*/
  2. #include <stdio.h>

  3. void bill(char *arg)
  4. {
  5.         printf("bill:you passed %s\n",arg);
  6. }
复制代码
  1. /*fred.c*/
  2. #include <stdio.h>

  3. void fred(int arg)
  4. {
  5.         printf("fred:you passed %d\n",arg);
  6. }
复制代码

然后
$ ar crv libfoo.a bill.o fred.o
$ ls
bill.c  fred.c  lib.h libfoo.a

libfoo.a即为一个库,这样理解对吧?

论坛徽章:
0
10 [报告]
发表于 2008-11-03 01:01 |只看该作者
The header defines the interface, which the library implements.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP