C内核库包括和膨胀
我是新来的,所以我提前感谢你的帮助和耐心。我用C编写了一个程序,如下所示:C内核库包括和膨胀,c,coding-style,linker,include,include-guards,C,Coding Style,Linker,Include,Include Guards,我是新来的,所以我提前感谢你的帮助和耐心。我用C编写了一个程序,如下所示: main.c arpsend.h - header w/include guard for arpsend.c functions arpsend.c - includes <net/if.h>, <pthread.h>, etc. arprec.h - header w/include guard for arprec.c functions arprec.c - includes <
main.c
arpsend.h - header w/include guard for arpsend.c functions
arpsend.c - includes <net/if.h>, <pthread.h>, etc.
arprec.h - header w/include guard for arprec.c functions
arprec.c - includes <net/if.h>, <pthread.h>, etc.
main.c
arpsend.h-标题,包括arpsend.c函数的保护
arpsend.c-包括。
arprec.h-带有arprec.c功能保护的标题
arprec.c-包括。
arpsend和arprec文件使用许多相同的内核库函数和定义。我已经注意到,当我编写arprec.c代码时,我的程序大小急剧增加。它比我的代码应该具有的内容膨胀得多。这使我得出结论,arpsend.c和arprec.c都在各自的.c文件中链接了他们自己需要的linux库代码。链接对于项目是多余的,但对于每个.c文件都是必需的
我的问题如下:
如果这是多余的,我道歉。我在这里浏览了几个小时的论坛。我找不到确切的问题。再次感谢您的帮助当您将arprec.c文件添加到项目中时,您认为您的二进制大小应该增加多少,而不是增加多少 库函数只链接到最终可执行文件一次,而不管项目中有多少文件使用它们。链接器通常是智能的,在最终可执行文件中只包含代码实际使用的库函数;arprec.c是否可能使用arpsend.c不使用的库调用
欢迎来到堆栈溢出。请尽快阅读这一页。你是怎么测量尺寸的?在编写
arprec.c
之前,程序的大小是多少?之后的尺码是多少?arprec.o
和arpsend.o
的大小是多少?您的代码是内置在内核中,还是使用系统头的常规用户程序?你使用的是内核头还是系统头?你有没有查看过其他文件是否包含include-guard?哦!我不知道有人发了这个帖子。感谢大家的回应。再说一次,我对这方面还不太熟悉,所以我感谢你的帮助。不,我认为arprec.c不可能使用arpsend.c不使用的任何调用。事实上,arprec.c只是我从arpsend.c移到它自己文件中的一个函数。当然,我必须复制所有的内容。但单是这一举措就在编译后又增加了12k。