将头文件包含到静态库中

Including header files into static library

因为每次我们link针对静态库时,我们还需要包含头文件,我想知道是否可以在创建静态库时将头文件归档到静态库中?

假设我有两个目标文件 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 中?这样,当 linking 对抗 libfoo.a 时,人们不再需要花费数小时来查找和 include foo1.hfoo2.h,所以这样做似乎有一些好处吧?

谢谢你的想法。

首先,编译源代码需要 header,而不是 link。您不需要 header 到 link 您的 objects 静态库。

其次,不,没有标准或通用的方法来生成包含库和 header 的存档。可能没有办法用普通的 C 编译器来做到这一点。

您可以在源代码中声明库的原型,而不是忽略 header。但这将是不安全的,因为无法保证库和您的源代码在编译时使用兼容的原型。

关注 Paul Griffiths 条评论。如果您只是不想为每个库都包含一个路径,您应该安装那些 headers 和那些库并在您的环境中设置路径。

示例:

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

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

中定义它

你可以将任何你想要的东西编译成一个静态库,但相应的是你将无法从外部调用函数(即通过链接),因为如果你想这样做,你将永远需要他们的原型