【发布时间】:2012-08-24 12:00:19
【问题描述】:
我只是在试验静态和动态库的东西。我制作了两个 .c 文件(比如 file1.c、file2.c)和两个 .h 文件,它们分别包含了一些在其中定义和声明的函数。
我还创建了一个新的 .c,它将调用上述两个 .c 文件中的函数。
如果我使用共享库/静态库,我想检查我得到的可执行文件的大小,所以我从文件 file1.c 和 file2.c。
在将这些库链接到我的主 .c 时,我发现动态库的可执行文件大小更大。这不是预期的,对吧?在使用共享库的情况下,库是在运行时加载的,为什么它的大小更大?
我正在使用以下命令:
静态库案例
gcc -c file1.c file2.c
ar -cvq libstat.a file1.o file2.o
gcc -o ex1 mainprg.c -L . -lstat
动态/共享库案例
gcc -c -fpic file1.c file2.c
gcc -shared file1.o file2.o -o libshar.so
gcc -o ex2 mainprg.c -L . -lshar
我发现 libshar.so 的大小比 libstat.o 大,而 ex2 的大小比 ex1 大。我希望这个结果是相反的。有人可以解释一下原因吗?
【问题讨论】:
标签: shared-libraries static-libraries