我的工作是一个全面的长期C编程项目,将需要模块化编程方法。作为设计的一部分,将创建库,因此我想确认头文件组织的真假解释:
问题
假设您正在创建一个库。经过仔细考虑,您已经决定,您想要构想的最终库,又名“哥斯拉”,应该由两个绑定到头文件的单独C文件组成。在这个头文件中将存在函数声明;例如:
// offense.c
void attack_city(uint32_t force); // (in Newtons) - capable of a LOT of force!
...
// measure.c
void measure_effect(void);
...下面是您绘制的基本网络图:

因为force.c和measure.c都包含godzilla.h,所以所有内容都将从这个头文件中引用并包含在编译过程中,对吗?
编辑
用途: ARM微处理器
发布于 2013-01-30 12:56:36
头文件所做的就是告诉编译器哪些函数是可用的,它们应该如何调用(有多少类型的参数,以及返回值)。
是链接器(或者图书管理员,在创建库时,而不是创建可执行文件)带来了编译每个.c文件所产生的多个对象文件。因此,您需要告诉编译器(例如,在命令行上,通过IDE或Makefile)希望它编译的所有c文件。
发布于 2013-01-29 21:24:46
您应该熟悉链接的工作原理。
通常,在编译时,您使用一些未解析的引用创建对象文件,这些引用将由链接器解析,从而创建二进制文件。其中一些引用可以指向外部库,并且将被“未解决”,并将在运行时被解析。
头文件只为编译器提供函数的签名(不提供查找实际实现位置的信息),因此它将知道如何将参数传递给函数。如果函数未在同一个模块中定义,则链接器将需要找到它。我不知道你在使用哪种系统,所以我帮不了你。
一般来说,在开始编写C库之前,您应该非常好地理解这些概念,否则您将创建一个糟糕的库,它将在每一个小版本中改变ABI,并将有一个坏的业力。
发布于 2013-01-29 23:10:57
在头文件和..lib文件之间没有隐含的“绑定”。
为了创建一个库,您需要显式地告诉您想要放入哪些已编译的文件(..obj/.o),链接器将不管头文件头如何创建库。
如果不同的..obj文件共享数据或相互调用,则头在链接时会发挥作用,但这并不隐含。
https://stackoverflow.com/questions/14592367
复制相似问题