因为每次我们链接静态库时我们还需要包含头文件,我想知道是否可以存档到静态库中,在创建它时,那些头?
假设我有两个由
生成的目标文件foo1.o
和foo2.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}这样做似乎有一些好处,对吗?
感谢您的想法。
答案 0 :(得分:2)
首先,需要标题来编译源代码,而不是链接它。您不需要标题来将对象链接到静态库。
第二,不,没有标准或通用的方法来生成包含库和它的标题的存档。可能用普通的C编译器无法做到这一点。
您可以在源代码中声明库的原型,而不是忽略标题。但这是不安全的,因为不能保证库和你的源码都是用兼容的原型编译的。
发表Paul Griffiths
次评论。如果您只是不想为每个库包含路径,则应安装这些标头和那些库,并在您的环境中设置路径。
示例:
export C_INCLUDE_PATH=$HOME/install/include
export LIBRARY_PATH=$HOME/install/lib
每次打开新shell时都必须将其导出,或者可以在.bashrc
答案 1 :(得分:1)
您可以将所需的所有内容编译到静态库中,但对应的是您无法从外部调用函数(即通过链接),因为如果您想这样做,您将始终需要它们原型