将头文件包含到静态库中
Including header files into static library
因为每次我们link针对静态库时,我们还需要包含头文件,我想知道是否可以在创建静态库时将头文件归档到静态库中?
假设我有两个目标文件 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 中?这样,当 linking 对抗 libfoo.a
时,人们不再需要花费数小时来查找和 include foo1.h
和foo2.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
中定义它
你可以将任何你想要的东西编译成一个静态库,但相应的是你将无法从外部调用函数(即通过链接),因为如果你想这样做,你将永远需要他们的原型
因为每次我们link针对静态库时,我们还需要包含头文件,我想知道是否可以在创建静态库时将头文件归档到静态库中?
假设我有两个目标文件 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 中?这样,当 linking 对抗 libfoo.a
时,人们不再需要花费数小时来查找和 include foo1.h
和foo2.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
你可以将任何你想要的东西编译成一个静态库,但相应的是你将无法从外部调用函数(即通过链接),因为如果你想这样做,你将永远需要他们的原型