我只是在试验静态和动态库的东西。我制作了两个 .c 文件(比如 file1.c、file2.c)和两个 .h 文件,它们分别包含了一些在其中定义和声明的函数。
我还制作了一个新的 .c 文件,它将调用上述两个 .c 文件中的函数。
如果我使用共享库/静态库,我想检查我得到的可执行文件的大小,所以我从文件 file1 的 .os 制作了一个静态库(libstat.a)和一个共享库(libshar.so)。 c 和文件 2.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 大。我希望这个结果是相反的。有人可以解释一下原因吗?