【发布时间】:2011-06-06 12:36:27
【问题描述】:
e.exe 链接到我的自定义静态库c.lib,它使用w.dll 中定义的 Win32 API。 w.dll位于C:\Windows\System32,其导入库为w.lib,位于Windows SDK目录下。 Shell w.lib 在c.lib 或e.exe 项目中被列为附加依赖? (e.exe 在这两种情况下都成功构建。)最佳实践是什么,为什么?我猜e.exe 不应该知道w.lib。
c.lib 仅供一组开发人员共享(不发送给客户)。
测试:我使用 VS2008 和 dumpbin 实用程序对这两种情况进行了测试,结果如下:
- 案例 1:
w.lib在c.lib项目中添加为附加依赖项。
dumpbin /archivemembers c.lib 输出将w.dll 中的偏移量和来自c.lib 项目的 .obj 文件作为存档成员列出。
- 案例 2:
w.lib没有作为附加依赖项添加到c.lib中,而是添加到e.exe项目中:
这一次,dumpbin 输出只包含c.lib 的.obj 文件,c.lib 的大小比情况1 小
(c.lib 在这两种情况下都被添加为w.exe 项目中的附加依赖项。)
注意:我在这里使用 w.lib 和 w.dll 作为 Windows 库的虚构通用名称,但它们可能是例如Userenv.lib 和 Userenv.dll 或 Version.lib 和 Version.dll...
【问题讨论】:
标签: c++ visual-studio winapi static-libraries