lib文件是啥?是否编译自动生成?我不加lib文件运行不了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lib文件是啥?是否编译自动生成?我不加lib文件运行不了?相关的知识,希望对你有一定的参考价值。
今天我在网上找了个vc6.0++的代码,直接写入运行不了,然后发现用到的头文件没加,还是运行不了,然后又跟据出错提示加上了相应lib文件才能运行,为什么这样?
lib文件是静态库,这种文件中有头文件中声明的函数的实现代码,一般用在静态连编上,编译链接时,将lib文件与其他模块编译生成的目标代码链接,从而形成能够运行的可执行文件。#pragma comment(lib, "pcc32_vc6.lib") 就是连入一个库文件,表示链接pcc32_vc6.lib这个静态库文件来生成可执行文件。 参考技术A 编译后 当然没有 生成.dll文件和.lib文件
要运行后(Build Dll -- F7 或 Execute) 才能 生成。
lib和dll文件的初了解
lib,dll这两样东西在许多编程书中都很少出现,但实际工程中,这两样东西的作用确实非常重要,我觉得c++程序员都有必要了解这两样东西。
首先总共有 动态链接 和 静态链接 这两种链接方式
静态链接:
静态链接使用静态链接库lib,且只在源代码编译时用到(编译期)。
编译生成静态库时会生成一个.lib文件
.lib里面装载了各种类,函数的实现。
这种静态链接的lib实际上是多个obj文件的集合。
为什么需要静态链接?
在实际工程中,往往各模块的规模庞大(一堆.h .cpp文件)
而编译时,每个.cpp对应生成.obj文件,一个模块生成一堆obj文件,瞬间把文件夹塞满,造成维护的不便性
为了解决这问题,可以将每个主要模块先编译成一个.lib文件,再使用静态链接的方法,在编译期将各模块的.lib的文件链接起来。
动态链接:
动态链接使用动态链接库dll,且只在程序启动时用到(运行期)
编译生成动态链接库时会生成一个.dll文件和一个.lib文件
.dll存放了各函数,.exe刚开始运行时就会动态链接上所需的.dll文件(运行期)
.lib则一般是一些索引信息,记录了dll中函数的入口和位置(跟静态链接库的lib不同),不过仍然只在编译期用到(编译期)
为什么需要动态链接?
由于.dll存放了各函数,.exe里无需再存放.dll已含有的函数,只需调用时存放相应的函数地址,这样可以将.exe的空间大小转移一部分给.dll。
在大型软件的更新中,如果更新一个庞大的exe文件,负担想必是极大的。如果仅针对其中某几个.dll更新,则可以减少更新的大小。提高灵活性。
缺点还是有的,在程序刚开始运行时,程序会动态链接n个.dll,这个操作需要花时间。
(某些大型游戏,点开图标后,半天都不把程序弹出来,大概也有这个原因- -||)
以上是关于lib文件是啥?是否编译自动生成?我不加lib文件运行不了?的主要内容,如果未能解决你的问题,请参考以下文章