我需要一些帮助,以便在MinGW下使用GCC进行编译。
说我有2个文件: a.c包含2个函数a1和a2 b.c包含2个函数b1和b2。
然后我将2个对象链接到共享库中。使用的命令如下:
gcc -c a.c
gcc -c b.c
gcc -shared -Wl, --version-script v.ver -Wl, -Map=out.map -Wl, --strip-all -o mydll.dll a.o b.o
v.ver看起来像:
mylib {
global: a1;
a2;
local: *;
}
用于控制要导出的函数。
通过检查mapfile,我可以看到b.c中的2个函数也包含在dll的.text部分中。
因为这个dll只导出a1和a2,而b1和b2只在b.c中定义但从未在任何地方使用过。我可以在gcc或ld中添加任何选项,以便b1和b2不会内置到dll中,这样我就可以在dll中节省一些空间吗?
由于
答案 0 :(得分:3)
是的,这是可能的。为此,在将C源代码编译为对象时添加以下两个标志:
-ffunction-sections -fdata-sections
这将生成更大的目标文件,但会为链接器添加大量信息。调用链接器时,添加以下标志:
--gc-sections
链接器现在将丢弃所有未使用的函数和部分。
另请参阅此问题:Query on -ffunction-section & -fdata-sections options of gcc了解详情。