静态库为什么需要 头文件?编译的时候会编译引用的动/静态库吗?动静态库使用及区别

1、‌静态库‌在编译时直接整合到目标程序中,这意味着静态库中的代码会被完整地复制到最终的可执行文件中。因此,使用静态库编译的程序不依赖于外部库文件,可以在没有安装这些库的机器上独立运行‌。既然如此,为什么还需要头文件?

=》因为:

‌静态库需要头文件的原因是因为:头文件提供了库中函数的声明,允许开发者在其他代码文件中调用这些函数,而无需关注函数实现的细节。

静态库(如Windows下的.lib文件或Linux下的.a文件)是编译后的二进制文件,它们包含了库函数的实际实现代码。然而,当其他开发者想要使用这些库函数时,他们需要知道这些函数的接口信息,包括函数名、参数类型、返回值类型等,以便正确地调用这些函数。这些接口信息就是通过头文件(.h文件)提供的。头文件包含了函数的声明,但不包含函数的实现代码,它主要起到描述性作用,使得多个代码文件可以共享全局变量和函数声明,避免定义冲突,并提高代码的模块化和可维护性‌12。

简而言之,如果没有头文件提供函数声明,其他开发者将无法正确地调用静态库中的函数,因为他们不知道如何正确地传递参数或调用这些函数。因此,为了使静态库能够被广泛使用和集成到各种项目中,提供头文件是必要的步骤之一‌。

2、

我们把公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序(exe)运行时将不再需要该静态库。(如果exe引用的只有静态库,可以直接将exe拷贝给客户使用。)

动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才和可执行程序一起被载入内存,因此在可执行程序(exe)运行时还需要动态库同时存在。(如果exe引用的有动态库,将exe拷贝给客户使用的时候,必须要给动态库一起拷贝过去。不然exe无法正常打开使用)

3、使用与区别

静态库使用:头文件放到一个名为include的目录下,将生成的静态库文件放到一个lib目录下,然后将这2个目录都放到一个文件夹下,此时就可以将“这个文件夹”给别人使用了;

动态库使用:头文件放到一个名为include的目录下,将生成的动态库文件放到一个dll目录下,然后还有一个动态库的导入库lib文件,放到lib目录下,将这3个目录都放到一个文件夹下,此时就可以将“这个文件夹”给别人使用了;

这里可能有个疑问,动态库怎么还有一个DynamicLibrary.lib文件?即无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢?其实,两个是完全不一样的东西。

  StaticLibrary.lib的大小为190KB,DynamicLibrary.lib的大小为3KB,静态库对应的lib文件叫静态库,动态库对应的lib文件叫【导入库】。实际上静态库本身就包含了实际执行代码符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值