2010-06-19 56 views
0

比方说,我们有一些库编译成某文件。之后,该库与其他代码链接到某个可执行文件.exe中。 .a文件的大小是6Mb,而.exe文件的大小是3Mb。对此的明显解释是,链接器从库中抛出未使用的代码。 我想知道的是最终可执行文件中真实的库代码版本。库代码的内存占用分析

回答

0

库有实现很多功能。一个EXE使用那里的一些。 liker只在exe中添加exe使用的函数的代码。

+0

这就是我所说的“这种明显的解释是,链接器从库中投掷器出未使用的代码” – ashrugger 2010-06-19 12:16:17

+0

,但它必须通过设计,所以如果你使用LIB文件。如果使用有大的LIB abd,则只能使用LIB中的一个函数,那么只有一个来自LIB的具有它的依赖性的OBJ将被添加到EXE中。另一方面,如果你在一个OBJ文件中放置了很多功能并将其链接到你的应用程序,整个OBJ将被添加到EXE中。对于附加开关,可以从导入的OBJ文件中删除未使用的功能。 – Oleg 2010-06-19 16:34:29

+0

例如在http://en.wikipedia.org/wiki/Static_linking可以读取以下“随着静态链接,它足以包括(由目标可执行直接和间接引用的库的那些部分或目标库)。对于动态库,整个库被加载,因为事先并不知道哪些函数将被应用程序调用。这种优势在实践中是否显着取决于库的结构。“ – Oleg 2010-06-19 16:45:42

3

退房的连接选项。链接器通常可以选择生成映射文件。这是链接到最终图像的功能列表以及它们来自哪里。听起来就像你使用的是gcc,使用-map选项。