.h头文件和.a静态库文件问题记录

来源:互联网 发布:微信二级分销系统源码 编辑:程序博客网 时间:2024/05/20 05:24

场景:

1. ocilib目录中有type.h和ocilib.c,其中type.h中定义了一个结构体field_struct(其中有一个字段val,开始为char[1024],后来被加长为char[2048]),并且在ocilib.c中被使用,ocilib.c和type.h被编译成为静态库文件ocilib.a

2. svrlib目录中有svrlib.c,其中也使用到了type.h的field_struct,但是由于Makefile中链接的INCPATH写错了,指引到了修改之前的type.h(即field_struct中val字段还是为char[1024]),编译生成静态库文件svrlib.a

3. appsvr目录中有appmain.c,其中使用了type.h的field_struct以及ocilib.a和svrlib.a中的函数,链接正确的type.h编译后形成可执行二进制文件appmain


结果:

appmain中使用ocilib.a中的函数时,field_struct.val的长度为2048

appmain中使用svrlib.a中的函数时,field_struct.val的长度为1024


总结:

1. .h的内容在.a被编译生成时被直接使用,编入了.a,不再因后续使用.a时链接的.h变化而变化

2. .h影响且只影响当前编译生成的动态库、静态库、二进制文件