linux c 中的头文件.库文件

 

头文件: .h 声明了库文件中包涵了哪些函数及调用接口

库文件: 提供了函数库的文件,有两种,一种是静态连接的(.a),需要在程序编译时连接;另一种是动态连接的(.o,.so),在程序运行时连接.

库函数: 在库文件里提供的函数,就可以称之为库函数吧.
 
===================================================
===================================================
Q:Linux下的C的库文件和头文件有什么区别?
如果按我的理解
头是声明
库是定义 
但是为什么有的文件编译的时候还要特意连接一下库呢?
 
A1:你看写makefile的时候 不都要连接一下吗?
可能是VC环境给我们都做好了,所以我们习惯了,但是在UNIX/LINUX下要指定好连接库,不然可能会出现你不希望看到的错误.
 
A2:Linux下的C库头文件 和 windows 下的差不多, 向ANSI C 靠拢. 要写得多一点, 例如 VC++ 可以省写 string.h, Linux下 要写. 

链接时要指定库名,例如数学库.

库是 obj (*.o) 文件的集合体. 
头是 宏,原型等

特意连接 -- VC,TC 也需要, 不过 VC,TC编译器安装时做好了环境.

Linux / unix 是开放性的,允许链接各式各样外来库--更多,更复杂.不象VC,TC是"排它"的,单一链接自己库. 所以 VC,TC 可以预知预设.
 
==========================================
==========================================
Q:标准库函数为什么只有头文件呢?
我们一般写类的时候,都把类的声明放在头文件里面,把类的定义写在一个cpp文件里面。那么标准的库函数如iostream.h,里面的东西乱七八糟的看都看不懂,它是把类的定义也放在头文件里面了吗?
 
A:
 
头文件中存放的只是函数的声明部分,真正的实现部分在与相应头文件同名的.lib文件中,在程序编译时才联编进目标文件的。
 
=========================================
头文件里有的只不过是声明而已,实现文件早已编译成   .Obj文件了,只有在LINK的时候才用到它们。   
  头文件里只是多包含了几个预编译符,跟一般的文件声明是一样
=========================================
C++的标准函数实现就直接在头文件里。不相你打开STL的文件来看看,根本就不是编译成库的形式,因为他们都是用template技术实现的,必须在编译时再实作出实现了,怎么可能预编译好的呢?你搜搜自己的电脑上有iostream.lib这个文件吗?   
C里面的函数库是用.h公开声明,然后用.lib提供实现,但是C++中并非完全如此。
c++的编译器,在预处理的时候,根据头文件名字在默认的include所在路径的中查找匹配的头文件,如果存在这个文件,则编译器在根据这个头文件里面的函数声明对比,确定源代码中所使用的函数有效性,如果有效,则编译器根据该头文件自啊默认的librarypath中查找对应的库,(一般的库文件都是规律的以lib+部分头文件名表示,)找到之后,将对应的函数定义,加入到源代码中,完成预处理操作。

这一点在linux下的g++ 体现的很明显

在linux下 执行 g++ -v就能看到基本路径的默认配置了 


不过静态库和动态库是不一样的,上面那种状态只是适合静态库,

动态库的话,并不会将函数完整加入到源代码中,而是以接口的方式存在,在运行时候,自动调用动态库中的函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值