将头文件包含到静态库中

时间:2015-04-27 14:16:51

标签: c gcc static-libraries header-files static-linking

因为每次我们链接静态库时我们还需要包含头文件,我想知道是否可以存档到静态库中,在创建它时,那些头?

假设我有两个由

生成的目标文件foo1.ofoo2.o
gcc foo1.c -I foo1.h -c -o foo1.o
gcc foo2.c -I foo2.h -c -o foo2.o

Gcc教程告诉我们,我们可以使用

生成libfoo.a
ar libfoo.a foo1.o foo2.o 

这听起来很傻,但是归档时是否可以将这些头文件放在libfoo.a中?通过这种方式,当链接libfoo.a时,人们不再需要花费数小时才能找到并包含 foo1.h和{{1}这样做似乎有一些好处,对吗?

感谢您的想法。

2 个答案:

答案 0 :(得分:2)

首先,需要标题来编译源代码,而不是链接它。您不需要标题来将对象链接到静态库。

第二,不,没有标准或通用的方法来生成包含库和它的标题的存档。可能用普通的C编译器无法做到这一点。

您可以在源代码中声明库的原型,而不是忽略标题。但这是不安全的,因为不能保证库和你的源码都是用兼容的原型编译的。

发表Paul Griffiths次评论。如果您只是不想为每个库包含路径,则应安装这些标头和那些库,并在您的环境中设置路径。

示例:

export C_INCLUDE_PATH=$HOME/install/include
export LIBRARY_PATH=$HOME/install/lib

每次打开新shell时都必须将其导出,或者可以在.bashrc

中定义它

答案 1 :(得分:1)

您可以将所需的所有内容编译到静态库中,但对应的是您无法从外部调用函数(即通过链接),因为如果您想这样做,您将始终需要它们原型