kar*_*hik 6 c gcc posix makefile
可能重复:
头文件和库之间有什么区别?
谁能告诉我头文件和库文件的实际含义是什么?它们的区别是什么?
例如,我们在程序中包含带扩展名为.h的头文件,它只是定义但实际的实现是在库文件中定义的,这是在链接阶段完成的,这是人们所说的,但有时我们也包括库文件目录用于生成exec文件的程序,例如在posix线程中,人们说要在命令行中包含-lpthread,但为什么当我们包含头文件#include <>为什么我们仍然需要包含库文件时我可能知道原因请??
pax*_*blo 11
通常,头文件通知编译器某些事物(主要是它们的存在或声明),以便编译器可以正确地构建单个转换单元(例如单个C文件).
库文件是执行该头文件中指定的工作的实际可执行代码.这由链接器链接以提供实际功能(_definitions而不仅仅是声明).
因此,在您的示例中,您可能有以下行:
#include <pthread.h>
Run Code Online (Sandbox Code Playgroud)
它告诉编译器所有关于存在的pthread_mutex_this,pthread_condvar_that和pthread_thread_the_other东西,但实际上并没有提供这些东西的实现.
该-lpthread选项告诉链接器它应该根据pthread它可以从实际实现中提取的名称来定位库,以便保留最终的可执行文件.
类似地,虽然stdio.h保存有关I/O内容的信息,但它的实际代码将在运行时库中(尽管您很少需要专门链接该库,因为编译器会尝试为您处理它).因为您通常与编译器链接(即,编译器为您调用链接器),所以它知道您可能需要C运行时库.如果您直接使用链接器(例如使用ld命令),那可能不会发生,并且您必须明确.
头文件: 这些文件包含在任何程序的顶部.如果我们在程序中使用任何函数,那么必须包含包含该函数的声明或定义的头文件.在stdio.h中定义了printf().我们必须包含它(通过#include以便使用printf().
库文件: 这些是编译器用来定义已在程序中使用并已在头文件中声明的函数的文件.像,printf()有完整的定义,如它将如何工作等.在I/O库中!因此,编译器使用该库来获取printf的机器代码.
区别:
| 归档时间: |
|
| 查看次数: |
51833 次 |
| 最近记录: |